Linq To实体比较List <int>的值

tco*_*ode 2 linq linq-to-entities entity-framework entity-framework-5

我正在使用Entity Framework 5.0,我遇到LINQ查询问题.我有以下方法接受一个整数值,然后传递给查询.这很好用.

public IList<tblcoursebooking> GetStandardReport(int AttendanceID)
{
    return _UoW.tblcoursebookingRepo.All
           .Where(cb => cb.Attended.Equals(AttendanceID)
           .ToList();

} 
Run Code Online (Sandbox Code Playgroud)

但是,我需要更改方法,使其接受整数列表,然后拉出所有记录,其中Attended等于任何整数列表.像这样的东西

public IList<tblcoursebooking> GetStandardReport(List<int> AttendanceIDs)
{
    return _UoW.tblcoursebookingRepo.All
           .Where(cb => cb.Attended.Equals == any AttendanceIDs
           .ToList();
} 
Run Code Online (Sandbox Code Playgroud)

我想尝试使用ContainsAny LINQ关键字,但是,Attended是单个值,而不是集合,在点之后我可用的唯一属性是

CompareTo,Equals,GetHashCode,GetType,GetTypeCode,ToString

有人可以帮忙吗?

谢谢你的时间.

Fla*_*ter 7

使用该Contains函数,它将匹配给定列表中的每个ID:

return _UoW.tblcoursebookingRepo.All
       .Where(cb => AttendanceIDs.Contains(cb.Attended))
       .ToList();
Run Code Online (Sandbox Code Playgroud)

一般来说,请记住,Where子句只不过是一个带有嵌套if语句的花哨的foreach(虽然非常奇特).它需要一个计算结果为布尔值的表达式.如果您只需要检查一个项目,而不使用LinQ,您很快就会想到:

if(AttendanceIDs.Contains(myItem.Attended))
Run Code Online (Sandbox Code Playgroud)

您可以用完全相同的方式处理LinQ的Where子句,如上所示:)如果您感到难过,只需考虑如何一次检查它,因为LinQ将为您执行迭代部分.

更新

正如费萨尔的回答中提到的,WhereIn提供了类似的功能.尚未使用它,但它似乎是一种更简洁的方法.

我并没有改变我的答案,因为我觉得指出你如何在一个Where条款中使用布尔评估更为重要,这也应该有助于你可能遇到的所有未来相似的问题WhereIn.

但是,你可以WhereIn在这个特殊情况下使用:-)