使用LINQ从数组查询Int ID

时间:2012-06-14 09:45:15

标签: c# linq

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

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

模型

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

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

最终,我希望能够将其用作访问实体框架的查询的一部分,因此将查询作为IQueryable<>的一部分传递。当我只想要一个满手的时候,确保我没有返回大量的数据,例如:

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

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

干杯!

2 个答案:

答案 0 :(得分:17)

  

但是我真的需要继续将ID转换为字符串

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

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

或执行加入:

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

答案 1 :(得分:0)

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

      public class Order {
  public long OrderId { get; set; }
  public string Name { get; set; }}


    public class Rep
    {
        private List<Order> orders { get; set; }

        public void Q()
        {
            long[] testArray = {123, 456};
            var res  = orders.Intersect(orders);
        }
    }