我有一个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."
我错过了什么?
答案 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();