Linq To实体将值与List <int> </int>进行比较

时间:2013-04-05 08:17:07

标签: linq entity-framework linq-to-entities 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();

} 

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

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

我想尝试使用包含任何 LINQ关键字,但是,参加是单个值,而不是收集,点后唯一可用的属性是

的CompareTo, 等于, GetHashCode的, 的GetType, GetTypeCode, 的ToString

有人可以帮忙吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:7)

使用Contains功能,它会将每个ID与给定列表匹配:

return _UoW.tblcoursebookingRepo.All
       .Where(cb => AttendanceIDs.Contains(cb.Attended))
       .ToList();

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

if(AttendanceIDs.Contains(myItem.Attended))

你可以用完全相同的方式处理LinQ的Where子句,如上所示:)如果你感到难过,只要考虑一下如何检查它,因为LinQ会为你做迭代部分。

<强>更新

如Faisal的回答所述,WhereIn提供了类似的功能。尚未使用它,但它似乎是一种更简洁的方法。

我并没有改变我的答案,因为我觉得指出如何在Where子句中使用布尔值评估更为重要,这也应该有助于您可能遇到的所有未来类似问题其中WhereIn不相关。

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

答案 1 :(得分:3)

您需要使用WhereIn。

public static void Main()
{
  using (MyObjectContext context = new MyObjectContext())
  {
    //Using method 1 - collection provided as collection
    var contacts1 =
      context.Contacts.WhereIn(c => c.Name, GetContactNames());

    //Using method 2 - collection provided statically
    var contacts2 = context.Contacts.WhereIn(c => c.Name,
      "Contact1",
      "Contact2",
      "Contact3",
      "Contact4"
      );
  }
}

'Contains()' workaround using Linq to Entities?