linq用不好真的是个噩梦,一个简单的sql语句,用linq之后变成几百次查询

2012-05-21 16:32:57 +08:00
 avatasia
有谁有linq经验分享的,可做不可做方面的例子
3124 次点击
所在节点    问与答
8 条回复
haohaolee
2012-05-21 17:03:32 +08:00
能不能分享下那个几百次查询的例子
leqoqo
2012-05-21 17:37:06 +08:00
很多书,很少看,在一个很小的项目里用过一点皮毛
magicshui
2012-05-21 17:42:09 +08:00
想瞅瞅这条吓人的LINQ :D
icyflash
2012-05-21 18:09:49 +08:00
linqpad是个好工具
gDD
2012-05-21 18:30:49 +08:00
我想你把你那个例子贴出来我们的看帖愉悦度会高很多,这种什么都没有的烂问题在Stack Overflow不被down vote到18层地狱。。。
avatasia
2012-05-22 13:42:14 +08:00
@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条查询了。
avatasia
2012-05-22 14:18:17 +08:00
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.
icyflash
2012-05-22 14:23:10 +08:00
UserRights.Where(ur=>ur.User.UserId==***).Select (ur => ur.Right).ToList()

不知道你是怎么查询user的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/36766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX