21

我正在寻找构建如下的 Lambda 表达式

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

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

有人有建议吗?

4

5 回答 5

31

为此使用IEnumerable.Contains 。

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

您当然可以构建idList内联。

于 2012-11-22T07:58:35.800 回答
2

没有 in 运算符,但有一个 contains。只需颠倒您的逻辑:

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

于 2012-11-22T08:00:20.383 回答
0

您正在寻找IEnumerable.Contains

_db.Projects.Where(Project => list.Contains(Project.Id));
于 2012-11-22T07:58:53.540 回答
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);
}
于 2012-11-22T08:01:00.283 回答
0

基于Anders upvoted 解决方案的伪代码。

  1. 假设:使用来自维基百科的美国历史铸币厂的信息。
  2. 数据集:StateMints。
  3. 字段:位置,薄荷。
  4. 要求:选择所有具有 mint id 的硬币。
  5. StateMints 样本数据:
    Mint、Location

    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();
于 2018-09-12T18:15:56.610 回答