簡體   English   中英

在C#中的Linq IN錯誤

[英]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();

旁注:我假設您的問題中有錯字,因為someListOfIntegersidCar是您查詢的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM