2017-06-22 4 views
-1

私は2つのフィールドタイプの種類System.DateTimeの日付とIDが含まれているSQLサーブのテーブルを持っている私も同じ構造を含んでいたり、リスト内のオブジェクトのコレクションを持っている複数持つ表からLINQの選択が含まれてい

intデータと私は私がこれを実行したときしかし、それは私が何をしないのです"Unable to create a constant value of type 'RecordsTable'. Only primitive types or enumeration types are supported in this context."

の例外をスローするデータベース

var itemsToDelete = db.RecordsTable.Where(
    dbRecord => myList.Any(
     item => item.PhysicalID == dbRecord.PhysicalId && item.date.Equals(dbRecord.date) 
    ) 
); 

から試合を抽出するために探していますか?

+1

可能な重複 - where..in句複数の列を持つ](https://stackoverflow.com/questions/6912733/linq-to-entities-where-in-clause-with-multiple-columns) –

+3

'myList'はローカルリストであり、使用することはできません'db.RecordsTable.AsEnumerable()。Where ... 'を使用しない限り、複数の列に対してSQLクエリを生成します。これはすべてのデータをメモリ内のセットにプルします。 – user3185569

答えて

0

リスト内の投影フィールドを両方抽出して適用することができます。

var physicalIds = myList.Select(x => x.PhysicalID).Distinct().ToList(); 
var dates = myList.Select(x => x.date).Distinct().ToList(); 
var itemsToDelete = db.RecordsTable.Where(dbRecord => physicalIds.Contains(dbRecord.PhysicalID) && dates.Contains(dbRecord.date)).ToList(); 

メモリ内のレコードを取得した後、あなたは両方の投影とフィールドと条件によって、あなたの完全一致をフィルタするために参加する適用できます。エンティティへのLINQ [の

itemsToDelete = (from itm in itemsToDelete 
       join lst in myList on new {itm.PhysicalID, itm.date} equals new {lst.PhysicalID, lst.date} 
       select new itm).ToList();