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

问题描述 投票:17回答:5

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

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

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

有人有建议吗?

c# c#-4.0 lambda entity-framework-5
5个回答
23
投票

使用IEnumerable.Contains

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

你当然可以内联构建idList


2
投票

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

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


0
投票

您正在寻找IEnumerable.Contains

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

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);
}

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();
© www.soinside.com 2019 - 2024. All rights reserved.