1
haohaolee 2012-05-21 17:03:32 +08:00
能不能分享下那个几百次查询的例子
|
2
leqoqo 2012-05-21 17:37:06 +08:00
很多书,很少看,在一个很小的项目里用过一点皮毛
|
3
magicshui 2012-05-21 17:42:09 +08:00
想瞅瞅这条吓人的LINQ :D
|
4
icyflash 2012-05-21 18:09:49 +08:00
linqpad是个好工具
|
5
gDD 2012-05-21 18:30:49 +08:00
我想你把你那个例子贴出来我们的看帖愉悦度会高很多,这种什么都没有的烂问题在Stack Overflow不被down vote到18层地狱。。。
|
6
avatasia OP @gDD
@icyflash @magicshui @leqoqo @haohaolee public class User { [Key] public int UserID { get; set; } [Required] [DisplayName("登陆名")] public string NickName { get; set; } [Required] [DisplayName("用户姓名")] public string UserName { get; set; } [Required] [DisplayName("联系电话")] public string Phone { get; set; } [Required] [DisplayName("用户组")] public int GroupID { get; set; } public virtual IList<UserRight> UserRights { get; set; } } public class UserRight { [Key] public int UserRightID { get; set; } public int UserID { get; set; } public int RightID { get; set; } public bool? AsParent { get; set; } public bool? AsDefault { get; set; } public virtual User User { get; set; } public virtual Right Right { get; set; } } 下面是linq语句,查询某个User之后,获取其所有的Rights var rights = user.UserRights.Select(ur=>ur.Right).ToList(); 这个用sql profile看就变成n条查询了。 |
7
avatasia OP Rights.Where(r=>UserRights.Where(ur=>ur.UserID == Users.Single(u=>u.NickName =="hjwr").UserID).Select(ur=>ur.RightID).Contains(r.RightID))
这个是今天优化的 在c#里用的时候,得要改成这样 var rights =db.Rights.Where(r=>db.UserRights.Where(ur=>ur.UserID ==db.Users.FirstOrDefault(u=>u.NickName =="hjwr").UserID).Select(ur=>ur.RightID).Contains(r.RightID)); 不能使用Single,必须是FirstOrDefault. |
8
icyflash 2012-05-22 14:23:10 +08:00
UserRights.Where(ur=>ur.User.UserId==***).Select (ur => ur.Right).ToList()
不知道你是怎么查询user的 |