DynamicQueryable如何支持Array运算符?

时间:2011-02-17 11:05:39

标签: linq linq-to-sql dynamic-linq

我一直在使用Scott Guthrie的blog post中的DynamicQueryable Linq扩展。

该文档有一个受支持的运算符表。其中一个主要运营商如下:

  

X [...]   数组或索引器访问。不支持多维数组。

但是,我无法弄清楚如何使用它。

我没想到以下任何一项工作,事实上他们没有。

var ctx = new MyDbContext();
var parameters = new Object[] { new int[] { 1, 2, 3 } };

var qry = ctx.Set<User>().Where<User>("it.Id in @0", parameters);
var qry = ctx.Set<User>().Where<User>("it.Id.In(@0)", parameters);
var qry = ctx.Set<User>().Where<User>("it.Id = @0", parameters);
var qry = ctx.Set<User>().Where<User>("@0.Contains(it.Id)", parameters);

它基本上是一个In查询,但我不知道如何表达它。

1 个答案:

答案 0 :(得分:0)

这可能是一种误解。意思是可以在特定索引位置查询集合元素。例如:

public class Order
{
    public List<OrderDetail> OrderDetails { get; set; }
}

public class OrderDetail
{
    public string Description { get; set; }
}

然后您可以通过以下方式查询在第三个OrderDetail中具有详细描述“Bicycle”的所有订单:

string parameter = "Bicycle";
var qry = ctx.Set<Order>().Where<Order>("it.OrderDetails[2].Description == @0",
    parameter);

我认为出于您的目的,您需要在Where方法中不使用参数来构建“OR”链"it.Id == 1 or it.Id == 2 or it.Id == 3"(或在循环中动态构建此查询字符串)。