为了账号安全,请及时绑定邮箱和手机立即绑定

Linq到实体-SQL“in”子句

Linq到实体-SQL“in”子句

明月笑刀无情 2019-06-26 16:06:25
Linq到实体-SQL“in”子句在T-SQL中,可以有如下所示的查询:SELECT * FROM Users WHERE User_Rights IN ("Admin", "User", "Limited")如何在LINQto实体查询中复制?有可能吗?
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

你需要改变它的思维方式。您不是在预定义的一组可应用用户权限中“in”查找当前项的用户权限,而是询问预定义的一组用户权限是否包含当前项的适用值。这与在.NET中的常规列表中查找项的方式完全相同。

使用LINQ有两种方法,一种使用查询语法,另一种使用方法语法。本质上,它们是相同的,可以根据您的喜好交替使用:

查询语法:

var selected = from u in users               where new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights)
               select uforeach(user u in selected){
    //Do your stuff on each selected user;}

方法语法:

var selected = users.Where(u => new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights));foreach(user u in selected){
    //Do stuff on each selected user;}

我在这个实例中的个人偏好可能是方法语法,因为我不需要分配变量,而是可以对这样的匿名调用执行以下操作:

foreach(User u in users.Where(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights))){
    //Do stuff on each selected user;}

从语法上看,这看起来更复杂,您必须理解lambda表达式或委托的概念,才能真正了解发生了什么,但正如您所看到的,这将代码压缩得相当多。

所有这些都取决于您的编码风格和偏好-我的三个示例所做的事情都略有不同。

另一种方法甚至不使用LINQ,您可以使用相同的方法语法将“WHERE”替换为“FindAll”,并获得相同的结果,这在.NET 2.0中也适用:

foreach(User u in users.FindAll(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights))){
    //Do stuff on each selected user;}


查看完整回答
反对 回复 2019-06-26
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

在这种情况下,我将选择“内加入”。如果我已经使用包含,它将迭代6次,尽管事实是只有一个匹配。

var desiredNames = new[] { "Pankaj", "Garg" }; var people = new[]  {  
    new { FirstName="Pankaj", Surname="Garg" },  
    new { FirstName="Marc", Surname="Gravell" },  
    new { FirstName="Jeff", Surname="Atwood" }  }; var records = (from p in people join filtered in desiredNames on p.FirstName equals filtered  select p.FirstName).ToList();

含有的缺点

假设我有两个List对象。

List 1      List 2
  1           12
  2            7
  3            8
  4           98
  5            9
  6           10
  7            6

使用包含,它将搜索列表2中的每个列表1项,这意味着迭代将发生49次!


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 432 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信