2

我正在尝试编写动态 Linq 库查询以在条件下获取记录,订单数大于 3 且 ShipVia 字段等于 2 的客户。

以下是我尝试过的语法。

object[] objArr = new object[10];
objArr[0] = 1;
IQueryable<Customer> test = db.Customers.Where("Orders.Count(ShipVia=2)", objArr);

IQueryable<Customer> test = db.Customers.Where("Orders.Any(ShipVia=2).Count()", objArr);

但两者都不起作用。在第二个查询中,Any 返回 true,因此它不适用于 Count。建议我一种方法来实现这一点。

4

4 回答 4

2

如果您必须使用 Dynamic Linq,您的查询应该如下所示:

db.Customers.Where("Orders.Count(ShipVia == 2) > 3");
于 2014-01-31T08:27:48.487 回答
1
IQueryable<Customer> test = 
    from c in db.Customers
    from o in c.Orders
    where o.ShipVia == 2 // NOTE you need == not = for compare
    group c by c into grp
    select new {customer = grp.key, ordercount = grp.Count() };

未经测试,但我相信这应该在一个声明中完成,假设 Orders 是 Customer 中的一个集合。

请注意,您的 where 子句中的单个 = 非常危险,因为它会将 2 分配给所有 Shipvias 而不是 test (==)

于 2011-06-29T14:40:34.930 回答
1
var grp = db.Customers.Where("ShipVia=2").GroupBy("ShipVia");

var test = from a in grp
             where a.Count() > 3
             select a.Key;  
于 2011-06-29T14:36:04.773 回答
1

这样的事情怎么样。

IQueryable<Customer> test = db.Customers.Where(c => c.Orders.Where(o => o.ShipVia ==2).Count() >2);
于 2011-06-29T14:31:14.800 回答