2009-05-01 7 views
4

LINQで次のSQLを実行するにはどうすればよいですか。私は実際にNHibernateにLINQを使用しています(しかし、おそらくNHibernate LINQでは私が思うようにラムダ式が組み込まれているために可能ではありません)。しかし、私は一般的にLINQでそれを行う方法を知りたいです。私は前にこのような状況に遭遇したことはありません。(.Any())を使用してLINQを使用して子コレクションのプロパティをフィルタする方法

SELECT c.CustomerID, c.CustomerName --etc 
FROM Customers c 
     INNER JOIN Orders o 
     ON c.CustomerID = o.CustomerID 
WHERE o.Status = 1 

public class Customer 
{ 
    public int CustomerID { get; set; } 
    public string CustomerName { get; set; } 
    public IList<Order> Orders { get; set; } 
} 

public class Order 
{ 
    public int OrderID { get; set; } 
    public int CustomerID { get; set; } 
} 

私はこれに似た何かをしたい:

var customers = 
    (from c in Customers 
    where c.Orders.Where(o => o.Status == 1) 
    select c).ToList(); 

はあなたに感謝します!

答えて

11

whereステートメントはコレクションを返します。あなたは、任意の()メソッドを使用したい

var customers = from c in Customers 
       where c.Orders.Any(o => o.Status = 1) 
       select c 
+0

ああ、ありがとう! – Jeff

+0

いいえ、私の友人。 –

+0

私の考えはまだSQLではLINQにマップしようとしています – Jeff

0

このソリューションは、注文と顧客(つまり、お客様が注文プロパティを持っている)が、あなたが使用できるとのLINQ内の関係があることが必要です。

var customers = 
     (From c in Customers, o In c.Orders 
     Where o.Status == 1 
     Select c).ToList() 

乾杯!

0

LAMBDAまたはストレートLINQ to SQLをお探しですか?あなたはただ参加しようとしていますか?ここで

はラムダを使用して参加することになります。

var lambda = 
Customers.Join (
    Orders, 
    c => c.CustomerID, 
    o => o.CustomerID, 
    (c, o) => new { c, o } 
) 
.Where (w => w.o.Status == 1) 
.Select (s => s.c.CustomerID, s.c.CustomerName); 
関連する問題