[英]Linq IN in C# error
我正在嘗試這樣做:
myList = (from c in ipE.Cars
where (someListOfIntegers.Contains(idCar) && c.name == someName)
select c).ToList();
我收到的錯誤LINQ to Entities無法識別方法'Boolean Contains(Int32)'方法,並且該方法無法轉換為商店表達式。
我嘗試使用ANY,但仍然無法正常工作。 我收到錯誤消息:無法創建類型為'Closure type'的常量值。 在這種情況下,僅支持基本類型(例如Int32,String和Guid)。
如何解決呢?
不幸的是,您不能在EF查詢中使用本地集合。 您可以通過使用PredicateBuilder來解決它,並以OR
序列手動轉換Contains
操作:
var predicate = PredicateBuilder.False<Car>();
foreach (int id in someListOfIntegers)
{
int temp = id;
predicate = predicate.Or (car => car.idCar == id);
}
myList = (from c in ipE.Cars
where predicate && c.name == someName)
select c).ToList();
旁注:我假設您的問題中有錯字,因為someListOfIntegers
和idCar
是您查詢的EF模型的屬性。 所以我想你想查詢Car.idCar?
。
否則,您可以完全從EF查詢中重構Contains
。
您似乎在建議(評論) idCar
與任何實體都不相關-在這種情況下, 請不要在查詢中這樣做 :
List<Car> list;
if(someListOfIntegers.Contains(idCar)) {
myList = (from c in ipE.Cars
where c.name == someName
select c).ToList();
} else {
myList = new List<Car>(); // no need to touch the DB
}
我自己也看到了同樣的東西:L2E使用了一小組命令-並且沒有“ Contains(Int32)”命令。
如果您的列表很小,則嘗試添加“ .AsEnumerable()”,它將執行T-SQL select語句,並留下可以使用Contains的POCO對象。 例如
myList = (from c in ipE.Cars.AsEnumerable
where (someListOfIntegers.AsEnumerable().Contains(idCar)
&& c.name == someName)
select c)
.ToList();
不知道您是否同時需要兩個AsEnumerables ...嘗試一下!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.