2009-07-17 19 views
1

私はlinq結合でいくつかのことをしようとすると問題があります...現在、私は グループをlinqに持っています。さて、私は2つの異なるテーブルのticketID列に参加する結合を追加しようとしています。チケットとコメント。Linq Join Question

私は、SQL結合をLinqに変換しようとしていますが、それだけでは元の総カウント数のlinq文にマージされていません...誰かが助けてください!

オリジナルのLINQ文の:

From p In NewTickets _ 
Where p.TDate > "06/01/2009 12:00:00AM" And p.TDate < "07/01/2009 12:00:00PM" _ 
       Group p By p.LocationID _ 
       Into Count() _ 
       Select _ 
       LocationID, _ 
       NoOfTickets = Count _ 
       Order By NoOfTickets Descending 

私は必要な参加は、LINQの声明にマージ:

SELECT * 
FROM NewTickets as p 
LEFT OUTER JOIN NewComments AS c ON p.TicketID = c.TicketID 
WHERE (p.TDate > '06/01/2009 12:00:00AM') And (p.TDate < '07/01/2009 12:00:00PM') 
AND c.Comment Like '%ali%' 

はありがとうございました!

答えて

1

linq to sqlデザイナーでNewTicketsとNewCommentsの間にリレーションシップを追加すると、それらのクラスでプロパティを作成してナビゲートできます。

これらのプロパティを使用するクエリは自動的に結合に変換されます。例:

from t in db.NewTickets 
where t.NewComments.Any(nc => nc.Comment.Contains("ali")) 
group t by t.LocationID into g 
select new {LocationID = g.Key, NoOfTickets = g.Count()} into x 
order x by x.NoOfTickets descending 
select x; 

C#コード例のお詫び。

また、あなたのsqlの左側の結合が問題であることを指摘したいと思います。コメントのないチケットはali基準によって削除されます。内部結合はうまくいくでしょう。

+0

ような何かが再びありがとう...私は自分の「答え」私は十分なスペースとVBの翻訳のためのスタイリングが欲しかったので、質問。再度、感謝します!!! – wali

0

それは大部分です...私はこれとは別の方法で攻撃しなければなりません。今は私の合計が200歳以下からほぼ1300 ...各チケットは平均で約5つのコメントを持っているので、私はこれを股関節から撮影することを前提としています。

ありがとう、C#の問題はありません、私は今それを使用していると思う)。 VBで同じことを見たいVBを使用して誰のための

は、ここに行く:

Dim q = From e In db.NewTickets _ 
       Where e.NewComments.Any(Function(nc) nc.Comment.Contains("ali")) _ 
       Group e By e.LocationID _ 
        Into Count() _ 
        Select _ 
        LocationID, _ 
        NoOfTickets = Count _ 
        Order By NoOfTickets Descending 
1

この

var movies = NewTickets.Join(NewComments, x => x.TicketID, y => y.TicketID, (x, y) => x).ToList();