2016-08-08 8 views
0

に私はC#のこのLINQの式からattempingんだけど、のLINQのC#からVB.net

C#

var v = (from a in dc.ChatPrivateMessageMasters 
        join b in dc.ChatPrivateMessageDetails on a.EmailID equals b.MasterEmailID into cc 
        from c in cc 
        where (c.MasterEmailID.Equals(fromid) && c.ChatToEmailID.Equals(toid)) || (c.MasterEmailID.Equals(toid) && c.ChatToEmailID.Equals(fromid)) 
        orderby c.ID descending 
        select new 
        { 
         UserName = a.UserName, 
         Message = c.Message, 
         ID = c.ID 
        }).Take(take).ToList(); 

VB

Dim v = (From a In dc.ChatPrivateMessageMasters _ 
Join b In dc.ChatPrivateMessageDetails On a.EmailID Equals b.MasterEmailID _ 
Into cc _ 
From c In cc Where (c.MasterEmailID.Equals(fromid) AndAlso c.ChatToEmailID.Equals(toid)) OrElse (c.MasterEmailID.Equals(toid) AndAlso c.ChatToEmailID.Equals(fromid)) _ 
Order By c.ID Descending _ 
Select New With { _ 
    .UserName = a.UserName, _ 
    .Message = c.Message, _ 
    .ID = c.ID _ 
}).Take(take).ToList() 
を動作していないよう

私が受け取りました'Into'のエラーメッセージ: ')'が返されます

//あなたが参加するグループを必要としない、手始めに enter image description here

enter image description here

+1

あなたは、この[コード変換]をしようとしました(HTTP://converter.telerik .com /)? –

+1

はい、有用ではありません – John

+1

元の 'into'節の意図が何をしようとしているのか理解していますか? Visual Basicでは、前のクエリをラップするだけでなく、集計で「INTO」が使用されます。 –

答えて

0

私のデータベース構造更新(あなたjoin句のinto一部)は、あなたはすぐにそれを平らに考慮(ドン例えば、左外部結合をしないでください)。

var query = 
    (from m in dc.ChatPrivateMessageMasters 
    join d in dc.ChatPrivateMessageDetails on m.EmailID equals d.MasterEmailID 
    where (d.MasterEmailID == fromid && d.ChatToEmailID == toid) 
     || (d.MasterEmailID == toid && d.ChatToEmailID == fromid) 
    orderby d.ID descending 
    select new 
    { 
     m.UserName, 
     d.Message, 
     d.ID 
    }).Take(take).ToList(); 

をそして、それのVB.netと同等です::

あなたのC#のクエリは、単純にすることができ

Dim query = 
    (From m In dc.ChatPrivateMessageMasters 
    Join d In dc.ChatPrivateMessageDetails On m.EmailID Equals d.MasterEmailID 
    Where (d.MasterEmailID = fromid AndAlso d.ChatToEmailID = toid) 
    OrElse (d.MasterEmailID = toid AndAlso d.ChatToEmailID = fromid) 
    Order By d.ID Descending 
    Select m.UserName, d.Message, d.ID 
    Take take).ToList 
+0

コードはさらに簡素化できます。 'Take'節はVB.Netのクエリー構文に存在し、'(From ...).ToList'は全てのカッコを取り除く 'Aggregate ... Into ToList'として書き直すことができます。また、OrElseよりも優先されています) – Sehnsucht

+0

Jeffに感謝します。 – John

+0

@Sehnsucht:他の条項についてのヒントをありがとう。特に、私はTakeが利用可能であることを知らなかった。私はこれに 'Aggregate'をどのように統合するのかよく分からなかったので、最後に' ToList'コールをしました。 'Where'句の余分な括弧は私が同意しますが、誰か他の人がそれが助けになると思ったら、翻訳から削除しません。 –