Linq从表中选择多个包含

时间:2017-06-22 10:30:39

标签: c# sql-server linq

我有一个SQL Serve表,其中包含两个字段,类型为System.DateTime的日期和int类型的ID

我在列表中也有一组包含相同结构或数据的对象,我希望从数据库中提取匹配项

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

然而,当我运行它时会抛出"Unable to create a constant value of type 'RecordsTable'. Only primitive types or enumeration types are supported in this context."

的异常

我错过了什么?

1 个答案:

答案 0 :(得分: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();

在内存中获取记录后,您可以应用联接来通过AND条件的投影字段过滤您的完全匹配:

 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();