使用LINQ从数组查询Int ID

我有一个ID数组,我想通过Linq查询传递给entity framework以返回任何匹配

我编写了可以将Ids转换为字符串并使用’Contains’运算符的Linq查询,例如:

模型

public class Order { public long OrderId { get; set; } public string Name { get; set; } ...} Order[] orders = { new Order { OrderId = 123, Name = "Order1" }, new Order {...},...}; 

为此我可以使用类似的东西:

 long[] testArray = {123, 456}; 

然后

 var result = orders.Where(i => testArray.ToString().Contains(i.OrderId.ToString())); 

但是我真的需要继续将Ids转换成字符串吗? 如果我将它们保持为整数,我看起来好像无法访问’Contains’。

最终,我希望能够将其用作访问entity framework的查询的一部分,因此将查询作为IQueryable 的一部分传递,以确保当我只需要一个handfull时,我不会返回大量的数据,例如如:

 var orders = _repo.Orders().Where(i => orderArray.Contains(i.OrderId)); 

所以任何解决方案如果通过EF查询params(int数组)而不是获取所有数据然后在内存中检查它将是有用的。

干杯!

但我真的需要继续将Ids转换成字符串

绝对不。 目前尚不清楚什么是bars ,但假设它应该是orders ,你可以使用:

 var result = orders.Where(i => testArray.Contains(i.OrderId)); 

或者进行加入:

 var result = orders.Join(testArray, o => o.OrderId, id => id, (o, id) => o); 

您可以使用Intersect运算符,为什么使用数组而不是列表? 代码示例:

  public class Order { public long OrderId { get; set; } public string Name { get; set; }} public class Rep { private List orders { get; set; } public void Q() { long[] testArray = {123, 456}; var res = orders.Intersect(orders); } }