2016-08-09 8 views
-1

私は購入とパケットという2つのエンティティ(EF6)を持っています。私はこれらの2つに参加することができますが、特定の購入に含まれるパケットをどのように数えるのかはよく分かりません。私はこのSQLクエリをLINQ(Lambda式優先)に変換する必要があります。SQLをLinq Lambdaに変換

SELECT 
    Pur.*, 
    Pac.Price, 
    (SELECT COUNT(ID) FROM Packets WHERE PurchaseID = Pur.ID) AS PacketCount 
FROM 
    Purchases AS Pur 
INNER JOIN 
    Packets AS Pac 
ON 
    Pur.ID = Pac.PurchaseID 

NOTEありがとう:私は答えたQのを確認したが、それらのどれも私の問題に対処されていません。

+1

2つのクラスオブジェクト間の関係を含めると便利です。それは双方向ナビゲーションプロパティですか? – Heberda

+3

間違った質問。エンティティ 'Purchase 'が' Packages'関係を介してエンティティ 'Package'に関連する場合、必要なのは' myPurcahe.Packages.Count() 'だけです。あなたがエンティティ間にジョインを書くことが分かっているなら、あなたのドメインモデルはおそらく間違っているでしょう –

+0

それは私が@パナギオティスを考えていたものです。 – Heberda

答えて

0

私はLINQの専門家ではありませんが(それからは遠いですが)、私は何か似たようなことをしました。すでに参加していると言います。それはのラインに沿っている場合:

var joinList = (from Item1 in Purchases 
          join Item2 in Packets 
          on Item1.Id equals Item2.PurchaseId 
          select new { Item1, Item2 }).ToList(); 

次に、あなたが行くことができます:

var subList = joinList.Where(j => j.Item1.Id == myId).Select(s => { new s.Item1, s.Item2.Price, Count = joinList.Where(j => j.Item1.Id == myId).Count() }).ToList(); 

これは、あなたのSQLによって返されたレコードセットに似たリストを提供します。 Item1のすべてのフィールドを分割する必要があることに注意してください(Purchases。*に相当)。別の方法は、Select(s.Item2.Priceとして)にすべての名前を付けることです。

HTH