使用 Linq 匹配本地列表中任何对象的 2 属性
Match 2 property of any object in local list using Linq
public class OrderItem
{
public int OrderID { get; set; }
public int ProductionID { get; set; }
}
public class InventoryItem
{
public int InventoryItemID{ get; set; }
public int OrderID { get; set; }
public int ProductionID { get; set; }
public bool Created { get; set; }
public bool Deleted { get; set; }
}
使用这些示例对象,
我有一个 orderItems 的本地列表,我想查询 OrderID 和 ProductionID 在我的任何 Order Items 列表的两个属性上都匹配的库存项目
我尝试了下面的 linq 查询,但出现错误
我正在尝试的查询:
var results = await db.InventoryItems.Where(d =>
listOfOrderItems.Any(o => o.OrderID == d.OrderID && !d.DeleteFlag && d.ProductionId == o.ProductionItemId))
.Select(t => t.InventoryItemID).ToListAsync();
Exception thrown: 'System.NotSupportedException' in EntityFramework.SqlServer.dll
编辑
我被提到这个问题:Using Linq to Sql asynchronously with new async/await
但我的问题不是关于异步等待,而是关于使用我列表中的 .any 匹配的 2 个属性
试试这个:
var localIdPairs = listOfOrderItems.Select(x => x.OrderId + "-" + x.ProductionItemId).ToList();
var results = await db.InventoryItems
.Where(d => !d.DeleteFlag &&
localIdPairs.Contains(d.OrderId + "-" + d.ProductionItemId))
.Select(t => t.InventoryItemID).ToListAsync();
进一步查看错误我发现了这个错误:
Only primitive types or enumeration types are supported in this context.
我的集合 listOfOrderItems 是 List 类型,将其更改为 IEnumerable 解决了我的问题
public class OrderItem
{
public int OrderID { get; set; }
public int ProductionID { get; set; }
}
public class InventoryItem
{
public int InventoryItemID{ get; set; }
public int OrderID { get; set; }
public int ProductionID { get; set; }
public bool Created { get; set; }
public bool Deleted { get; set; }
}
使用这些示例对象,
我有一个 orderItems 的本地列表,我想查询 OrderID 和 ProductionID 在我的任何 Order Items 列表的两个属性上都匹配的库存项目
我尝试了下面的 linq 查询,但出现错误
我正在尝试的查询:
var results = await db.InventoryItems.Where(d =>
listOfOrderItems.Any(o => o.OrderID == d.OrderID && !d.DeleteFlag && d.ProductionId == o.ProductionItemId))
.Select(t => t.InventoryItemID).ToListAsync();
Exception thrown: 'System.NotSupportedException' in EntityFramework.SqlServer.dll
编辑 我被提到这个问题:Using Linq to Sql asynchronously with new async/await
但我的问题不是关于异步等待,而是关于使用我列表中的 .any 匹配的 2 个属性
试试这个:
var localIdPairs = listOfOrderItems.Select(x => x.OrderId + "-" + x.ProductionItemId).ToList();
var results = await db.InventoryItems
.Where(d => !d.DeleteFlag &&
localIdPairs.Contains(d.OrderId + "-" + d.ProductionItemId))
.Select(t => t.InventoryItemID).ToListAsync();
进一步查看错误我发现了这个错误:
Only primitive types or enumeration types are supported in this context.
我的集合 listOfOrderItems 是 List 类型,将其更改为 IEnumerable 解决了我的问题