如何在Linq

时间:2017-07-06 04:13:02

标签: c# linq

我想在OR查询中使用linq函数。 例如: SQL:

select * from tblusers where userid=1 and status='a' or status='b';

的LINQ:

var result= _Repository.selectAll().where(x=>x.UserID==1 && x.status=="a" OR x.status=="B");

它适用于linq查询。那么有人有任何想法吗?

5 个答案:

答案 0 :(得分:6)

因此,您了解&&运算符以进行比较,那么为什么不尝试使用||运算符?无论如何,这里是您的问题的解决方案,以下代码将为您提供结果,UserID为1,状态为aB

.where(x=>x.UserID==1 && (x.status=="a" || x.status=="B"));

答案 1 :(得分:3)

创建要检查的状态数组,然后使用contains。这样的事情。

var statusList = new[] {"a", "b"};

.Where(x=> x.UserID == 1 &&  statusList.Contains(x.status));

答案 2 :(得分:1)

在这里加上我的2美分,还有另一种方法可以在C#中编写sql查询,这或多或少类似于sql语法。

var result = from x in _Repository.SelectAll() where x.UserID == 1 && (x.Status == "a" || x.Status == "B") select x;

此语法为查询语法/表达式,其中您的代码段为方法语法/表达式。两者都将取得相同的结果。同样在场景后面,查询语法被编译为Method语法。

  

在编译时,查询表达式将根据C#规范中规定的规则转换为标准查询运算符方法调用。任何可以使用查询语法表达的查询也可以使用方法语法表示。但是,在大多数情况下,查询语法更具可读性和简洁性。

答案 3 :(得分:0)

List.Contains的其他方法,它生成像 SELECT * FROM tblusers WHERE userid=1 AND status IN ('a','b');

var acceptedStatus = new List<string> { 'a', 'b' };
var result= _Repository.selectAll()
                       .Where(x => x.UserID == 1)
                       .Where(x => acceptedStatus.Contains(x.Status));

请注意,您可以使用另一个&&函数代替Where运算符,并将它们链接起来。可以更加可读,然后在一行中适应所有条件。

答案 4 :(得分:0)

尝试代码:

var result =( from  x in _Repository.selectAll()
           where x.UserID==1 && (x.status=="a" || x.status=="B") select x);

另一种解决方案

 var result =( from  x in _Repository.selectAll().where(c=>c.status=="a" || x.status=="B")
               where x.UserID==1  select x);