linq dynamic where子句带有INT列的条件

时间:2015-10-02 14:41:44

标签: c# sql asp.net sql-server linq

我尝试使用linq查询根据帐户ID动态选择记录。 account id是sql server中的int列。

var idList = new int[123, 456];   //these number change with each user.
foreach (var id in idList) {
      query = query.WHERE(cs => cs.pkID = id);
}

以上使它成为AND where子句。我宁愿让它成为一个OR。 上面的idList可以包含1到100.与每个用户不同。

如何使linq与OR子句一起使用。包含不适用于INT列。

希望选择看起来像这样。

 select * from table where id = 123 or id = 456

我有一堆其他列可以附加到where子句。让动态的OR工作让我头疼。

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用cs=>idList.Contains(cs.pkID)

var idList = new List<int>(){123, 456};   
var result = query.Where(cs => idList.Contains(cs.pkID));

这样你就不需要任何循环,它相当于:

SELECT somecolumns FROM sometable WHERE pkId in (123, 456)

在您的情况下,使用Contains比使用OR创建动态where子句更有意义。

答案 1 :(得分:0)

query = query.WHERE(cs => idList.Contains(cs.pkID);

你可以使用类似的东西。

使用原始查询观看我们:=在C#中不是==。