C# “Lambda表达式”;在;操作员存在吗?

C# “Lambda表达式”;在;操作员存在吗?,c#,c#-4.0,lambda,entity-framework-5,C#,C# 4.0,Lambda,Entity Framework 5,我正在寻找像下面这样构建Lambda表达式的方法 IQueryable<Object> queryEntity = _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4)); IQueryable查询实体= _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4)); 在Lambda表达式的运算符中找不到任何 有人有什么建议吗?请使用 var idLi

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

IQueryable<Object> queryEntity = 
                _db.Projects.Where(Project=>Project.Id.IN(1,2,3,4));
IQueryable查询实体=
_db.Projects.Where(Project=>Project.Id.IN(1,2,3,4));
在Lambda表达式的运算符中找不到任何

有人有什么建议吗?

请使用

var idList = new[] { 1, 2, 3, 4 };
IQueryable<Object> queryEntity = 
                _db.Projects.Where(Project => idList.Contains(Project.Id));
var idList=new[]{1,2,3,4};
可查询查询实体=
_其中(Project=>idList.Contains(Project.Id));
当然,您可以内联构建
idList

您正在寻找的


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


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

您可以自己编写代码

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);
}
基于向上投票的解决方案

  • 假设:使用维基百科网站上的信息
  • 数据集:StateMints
  • 字段:位置,铸币厂
  • 要求:选择所有具有造币厂id的硬币
  • StateMints示例数据:
    造币厂,地点

    1.路易斯安那州新奥尔良奥兰多
    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();
    
    List mints=新列表{“C”、“CC”、“D”、“M”、“O”、“P”、“S”、“W”};
    var locations=StateMints.Where(p=>mints.Contains(p.Mint.ToUpper()).Select(p=>p.Location.ToList();
    
    参见;对于“本地来源”序列允许的类型有EF限制。整数很好。它与此有什么区别在
    IQueryable
    上下文中不可用,因为无法将其转换为SQL,服务器会理解。但请记住,如果这转到具有真正大idList(比如8000个ID)的DB,它可能会失败。我认为这是因为超过了批处理大小或其他原因——至少我有这样的理由。是的——所有因构造奇怪的LINQ查询而产生的问题都会被转化为缓慢的SQL调用。但这适用于你用IQueryable做的任何事情,真的如果
    idList
    非常大,那么它很有可能是一个DB查询结果,在这种情况下,您应该加入该查询,对吗?这是我问题的正确答案。它也在工作。但ID列表可能超过50000条记录。会有问题吗?var Id=_db.Projects.Where(Project=>Project.Title!=“test23rdoct”)。选择(pro=>pro.Id);var compIds=_db.companys.Where(comp=>comp.Participants.Any(part=>Ids.Contains(part.Project.Id));我两者都同意,不过我会测试一下。感谢您的深入讨论。这对我帮助很大。
    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();