C# 从对象列表中包含多个列的数据库中选择

C# 从对象列表中包含多个列的数据库中选择,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,我在从数据库中进行选择并检查行中的多个列是否等于对象列表时遇到问题。我是u linq和EF。 我有这样一个对象列表: public class Offer { public string OrderID { get; set; } public string OrderNumber { get; set; } public string Domain { get; set; } } 这就是我试图从数据库中进行选择的方式 return oDB.Offers.Where(w

我在从数据库中进行选择并检查行中的多个列是否等于对象列表时遇到问题。我是u linq和EF。 我有这样一个对象列表:

public class Offer
{
    public string OrderID { get; set; }
    public string OrderNumber { get; set; }
    public string Domain { get; set; }
}
这就是我试图从数据库中进行选择的方式

return oDB.Offers.Where(w => w.Status == WOStatus.Offer
       //pOffers is a object of type List<Offer>
       && pOffers.Any(o => o.OrderID == w.OrderID &&
       o.OrderNumber == w.OrderNumber && o.Domain == w.Domain)). 
       Select(w => new OffModels.Model { ID = w.ID, OrderID = w.OrderID,
       OrderNumber = w.OrderNumber, 
       Description = w.Description, Visible = w.Visible,
       Domain = w.Domain }).ToList();
返回oDB.Offers.Where(w=>w.Status==WOStatus.Offer
//pOffers是List类型的对象
&&任意(o=>o.OrderID==w.OrderID&&
o、 OrderNumber==w.OrderNumber&&o.Domain==w.Domain))。
选择(w=>newoffmodels.Model{ID=w.ID,OrderID=w.OrderID,
OrderNumber=w.OrderNumber,
描述=w.描述,可见=w.可见,
Domain=w.Domain}).ToList();
当我这样尝试时,我犯了错误

无法处理类型“Offer[]”,因为它没有到值层的已知映射。“(System.NotSupportedException)捕获到System.NotSupportedException:“无法处理类型“Offer[]”,因为它没有到值层的已知映射。”


如果我没有错的话,那是因为它无法转换为SQL查询。还有一件事,在这张表中,我有将近500万条记录。如何使其快速工作?

“还有一件事,在这个表中,我有近500万条记录。如何使其快速工作?”-这在数据库方面并不罕见;简短的答案是“索引”,但更复杂的答案是“与关键查询匹配的索引”-坦率地说,这就是为什么在“真实”系统中编写TSQL通常更好的原因。我在这3个领域(OrderID、OrderNumber和Domain)上有索引,但我仍然不知道如何选择它。当我有一个包含3个字段的列表要比较时,如何在TSQL中执行此操作?您尝试执行的操作需要一个
连接
join
需要两个表。你必须在数据库中具体化你的pOffers对象。此具体化可能是子查询/视图。复合索引仅从左到右有用,因此它将有助于OrderId匹配、“OrderId和OrderNumber”匹配和“OrderId和OrderNumber以及Domain”匹配,但不适用于OrderNumber匹配或域匹配;我想你需要3个索引,我不确定我是否理解正确,但在这里,我试图从我的数据库行中选择其他数据库中的行,这些行可能已更改(其他列),这3个字段是其他数据库中的关键字段,所有3个字段都必须匹配我数据库中的相同字段。