簡體   English   中英

LINQ加入並分組

[英]LINQ join and group

我是LINQ的新手,並且正在嘗試將此SQL查詢轉換為LINQ等效項:

select S.*
from Singles S
join (
    select max(SingleId) as SingleId
    from Single 
    group by ArtistId) S2 on S2.SingleId = S.SingleId
order by Released desc

該表如下所示:

 -----------
| Singles   |
|-----------|
| SingleID  |
| ArtistId  |
| Released  |
| Title     |
| .....     |
 -----------

依此類推...並包含以下示例:

SingleID   ArtistID    Released    Title
1          1           2011-05-10  Title1
2          1           2011-05-10  Title2
3          2           2011-05-10  Title3
4          3           2011-05-10  Title4
5          4           2011-05-10  Title5
6          2           2011-05-10  Title6
7          3           2011-05-10  Title7
8          5           2011-05-10  Title8
9          6           2011-05-10  Title9

因此,我正在嘗試獲取最新的單曲,但每位藝術家只有一首。 有人可以幫我嗎? :)也許還有更好的方式編寫查詢?

更新:

要回答評論中發布的問題:我們正在使用Microsoft SQL Server和LINQ to NHibernate。

這是我們目前正在使用的示例,該示例將返回最新的單曲,而無需按artistid進行分組:

public Single[] GetLatest()
{
    IQueryable<Single> q;
    q = from s in _sess.Query<Single>()
        where s.State == State.Released
        orderby s.Released descending
        select s;

    return q.Take(20).ToArray();
}

這個怎么樣:

var firstSingles = Singles.GroupBy(x => x.ArtistId)
                          .Select(g => g.OrderByDescending(x => x.Released).First())
                          .ToList();

這樣的事情應該起作用。

var query = from s in db.Singles
            group s by s.ArtistID into sg
            let firstSingle = sg.OrderByDescending(r => r.SingleID).FirstOrDefault()
            select new
            {
              ArtistID = sg.Key,
              SingleID = firstSingle.SingleID,
              Released = firstSingle.Released,
              Title = firstSingle.Title,
            }
singles
    .OrderByDescending(s => s.SingleID)
    .GroupBy(s => s.SingerID, (id, s) => new
    {
         SingleID = id,
         Title = s.First().Title
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM