简体   繁体   中英

How can I code a LINQ query with a count and a left join?

I have this code:

public class DeckOccurrences
{
    public string DeckGuid { get; set; }
    public int Count { get; set; }
}

public class Deck
{
    public string DeckGuid { get; set; } 
    public string Name     { get; set; }  
}

public class DeckSource
{
    public string DeckGuid { get; set; } 
    public string Name     { get; set; }  
}

var decks = App.EF.Db2.Deck.ToList();
var decksources = App.EF.Db2.DeckSource.ToList();

Previously I had this query but now I would like to do it using LINQ:

select  d.deckguid, count(de.deckguid) as Count 
from decksource d 
left join deck de on d.deckguid = de.deckguid group by d.deckguid

Can someone help by giving me some advice on where I should start with trying to do a query like this?

Update showing code used:

        List<DeckOccurrences> res = (from d in App.EF.Db2.DeckSource
                                     join de in App.EF.Db2.Deck on d.DeckSourceId equals de.DeckGuid into j1
                                     from j2 in j1.DefaultIfEmpty()
                                     group j2 by d.DeckSourceId into grouped
                                     select new DeckOccurrences()
                                     {
                                         DeckGuid = grouped.Key,
                                         Count = grouped.Count(t => t.DeckGuid != null)
                                     }).ToList();

like the first hit off SO search on google

from p in context.ParentTable
join c in context.ChildTable on p.ParentId equals c.ChildParentId into j1
from j2 in j1.DefaultIfEmpty()
group j2 by p.ParentId into grouped
select new { ParentId = grouped.Key, Count = grouped.Count(t=>t.ChildId != null) }

soo something like

from d in decksource
join de in deck on d.deckguid equals de.ChildParentId into j1
from j2 in j1.DefaultIfEmpty()
group j2 by d.deckguid into grouped
select new { 
    deckguid = grouped.Key,
    Count = grouped.Count(t=>t.deckguid != null) 
}

soo

var res = (from d in App.EF.Db2.Decksource
        join de in App.EF.Db2.Deck on d.deckguid equals de.ChildParentId into j1
        from j2 in j1.DefaultIfEmpty()
        group j2 by d.deckguid into grouped
        select new { 
            deckguid = grouped.Key,
            Count = grouped.Count(t=>t.deckguid != null) 
        }).ToList()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM