什么是c# Linq等效于VB.Net Linq Group Join和Into关键字

本文关键字:Linq Join Group Net Into 关键字 什么 VB | 更新日期: 2023-09-27 18:14:05

我正试图用c#重写一个旧的vb.net应用程序。我遇到了需要转换的linq代码:

 (From wn In dtx.WebQueryGroupNames Group Join _
                    wqg In dtx.WebQueryGroups On wn.QueryGroupNameKey Equals wqg.QueryGroupNameKey _
                    Into Group _
                    From p In Group.DefaultIfEmpty() _
                    Select wn _
                    Where Not (From x In dtx.WebQueryGroups Where x.QueryKey = queryKey Select x.QueryGroupNameKey).Contains(wn.QueryGroupNameKey)).Distinct.ToList

我现在看到的是:

 (from wn in dtx.WebQueryGroupNames Group join  
        wqg in dtx.WebQueryGroups on wn.QueryGroupNameKey equals wqg.QueryGroupNameKey 
        Into Group 
        from p in Group.DefaultIfEmpty() 
        select wn 
        where !(from x in dtx.WebQueryGroups where x.QueryKey = queryKey select x.QueryGroupNameKey).Contains(wn.QueryGroupNameKey)).Distinct(); 

我似乎找不到任何关于Group和Into关键字的信息,因为它转换为c#。我想我错过了一个关键点,使这个查询有意义。

什么是c# Linq等效于VB.Net Linq Group Join和Into关键字

我认为Group Join可以翻译成一个包含into子句的计划join。试试这个

 (from wn in dtx.WebQueryGroupNames join  
        wqg in dtx.WebQueryGroups on wn.QueryGroupNameKey equals wqg.QueryGroupNameKey 
        into g
        from p in g.DefaultIfEmpty() 
        select wn 
        where !(from x in dtx.WebQueryGroups where x.QueryKey = queryKey select x.QueryGroupNameKey).Contains(wn.QueryGroupNameKey)).Distinct();

见http://msdn.microsoft.com/en-us/library/bb397905.aspx

您要查找的术语是Group By。

var queryLastNames =
    from student in students
    group student by student.LastName into newGroup
    orderby newGroup.Key
    select newGroup;