2011-06-29 3 views
2

のLINQをどれを(使用)と動的に)(カウント、オーダー数を持っている お客様は3、以下2は私が条件でレコードを取得するために、動的LINQのライブラリクエリを記述しようとしています

等しいShipViaフィールドよりも大きく、私は何を試したのですか?

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

しかし、両方が動作していません。 2番目のクエリーでは、Anyはtrueを返し、Countと連動しません。 私にこれを実装する方法を提案してください。

+0

は多分それがあるべき "Orders.Count(ShipVia == 2)" – boca

+0

@boca:条件演算子は、=でない場合、内部クエリは、私が推測する、SQLに直接変換されます== – abatishchev

+0

はそれを手に入れました。決して気にしないでください – boca

答えて

1

このような場合はどうですか。

IQueryable<Customer> test = db.Customers.Where(c => c.Orders.Where(o => o.ShipVia ==2).Count() >2); 
+0

実際に私はLinq動的拡張ライブラリを使用しています。だから私はWhere()内の文字列ベースのクエリを渡す必要があります。私はこのラムダ式を文字列ベースのクエリに変換することはできません。 – ArpanDesai

+0

db.Customers.Where( "Orders.Count(ShipVia = 2)> 3")はどうですか? – boca

1
var grp = db.Customers.Where("ShipVia=2").GroupBy("ShipVia"); 

var test = from a in grp 
      where a.Count() > 3 
      select a.Key; 
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() }; 

テストされていないが、私は、これは受注が顧客の中に収集されていると仮定すると、1つのステートメントでそれをすべて行う必要があると考えています。あなたのあなたの単一=は句が、それはあなたがダイナミックのLINQを使用する必要がある場合は代わりにテスト(==)の全てshipviasに2

2

、クエリがそのようになっているはずの割り当てうとして非常に危険です

注意:

db.Customers.Where("Orders.Count(ShipVia == 2) > 3"); 
関連する問題