10

我有一组 Id,我想通过 Linq 查询将其传递给实体框架以返回任何匹配项

我编写了可以将 Id 转换为字符串并使用“包含”运算符的 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()));

但我真的需要继续将 Id 转换为字符串吗?如果我将它们保留为整数,似乎我无法访问“包含”。

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

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

因此,如果通过 EF 查询参数(int 数组)而不是获取所有数据然后在内存中检查它,那么任何解决方案都会很有用。

干杯!

4

2 回答 2

21

但我真的需要继续将 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);
于 2012-06-14T09:48:54.257 回答
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);
        }
    }
于 2012-06-14T09:52:40.937 回答