我正在使用 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
有人可以帮忙吗?
感谢您的时间。
答案 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"
);
}
}