3

我正在使用Entity Framework 5.0,但 LINQ 查询有问题。我有以下方法,它接受一个整数值,然后将其传递给查询。这工作正常。

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

} 

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

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

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

CompareTo、等于、GetHashCode、GetType、GetTypeCode、ToString

有人可以帮忙吗?

谢谢你的时间。

4

2 回答 2

8

使用该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 将为您完成迭代部分。

更新

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

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

但尽管如此,您也可以WhereIn在这种特殊情况下使用:-)

于 2013-04-05T08:30:22.530 回答
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"
      );
  }
}

使用 Linq to Entities 的“包含()”解决方法?

于 2013-04-05T08:30:47.443 回答