Lambda表达式“IN”运算符是否存在?

时间:2012-11-22 07:36:18

标签: c# c#-4.0 lambda entity-framework-5

我正在寻找像下面那样构建Lambda表达式

IQueryable<Object> queryEntity = 
                _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4));

我在Lambda表达式中找不到任何IN运算符。

有人有建议吗?

5 个答案:

答案 0 :(得分:23)

请使用IEnumerable.Contains

var idList = new[] { 1, 2, 3, 4 };
IQueryable<Object> queryEntity = 
                _db.Projects.Where(Project => idList.Contains(Project.Id));

您当然可以构建idList内联。

答案 1 :(得分:2)

运营商中没有,但有一个包含。只是颠倒你的逻辑:

IQueryable<Object> queryEntity = _db.Projects.Where(Project=>(new []{1,2,3,4}).Contains(Project.Id));

答案 2 :(得分:0)

您正在寻找IEnumerable.Contains

_db.Projects.Where(Project => list.Contains(Project.Id));

答案 3 :(得分:0)

你可以写自己的

public static bool In(this object item, IEnumerable list)
{
    return list.Contains(item);
}

public static bool In(this object item, params object[] list)
{
    return item.In(list);
}

答案 4 :(得分:0)

pseudocode基于Anders赞成的解决方案。

  1. 假设:使用来自维基百科Historical United States mints的信息。
  2. 数据集:StateMints。
  3. 字段:位置,薄荷
  4. 要求:选择所有具有薄荷糖ID的硬币。
  5. StateMints示例数据:
    薄荷,位置

    1.O,路易斯安那州新奥尔良
    2.W,西点,纽约
    3.D,科罗拉多州丹佛市

到目前为止,这是我的代码:

List<string> mints = new List<string> { "C", "CC", "D", "M", "O", "P", "S", "W" };  
var locations = StateMints.Where(p => mints.Contains(p.Mint.ToUpper())).Select(p => p.Location).ToList();