Csharp/C#教程:entity framework按日期选择每个组中的一个分享


entity framework按日期选择每个组中的一个

我有一个这样的表(表名:post):

+----+--------------------------+-------+------------+ | id | content | type | date | +----+--------------------------+-------+------------+ | 0 | Some text | TypeA | 2013-04-01 | | 1 | Some older text | TypeA | 2012-03-01 | | 2 | Some even older texttext | TypeA | 2011-01-01 | | 3 | A dog | TypeB | 2013-04-01 | | 4 | And older dog | TypeB | 2012-03-01 | | 5 | An even older dog | TypeB | 2011-01-01 | +----+--------------------------+-------+------------+ 

使用LINQ表达式我想找到每种类型的最新内容,因此结果应该是

 Some text | TypeA A dog | TypeB 

我已经尝试了一些事情,但没有指出非工作表达式。

如果你想获得整个post。 你可以试试这个:

 var query = Posts.GroupBy(p => p.Type) .Select(g => g.OrderByDescending(p => p.Date) .FirstOrDefault() ) 

我想您可以按类型对Posts行进行分组,然后从该类型的日期集合的降序排序中选择第一个内容

 from row in Posts group row by row.type into g select new { Content = (from row2 in g orderby row2.date descending select row2.content).FirstOrDefault(), Type = g.Key } 

或者使用临时结果和谓词

 var tmp = posts.GroupBy(x => x.type).Select(x => new {x.Key, date = x.Max(g => g.date)).ToArray(); var filter = PredicateBuilder.False(); foreach (var item in tmp) { filter = filter.Or(x => x.type == item.Key && x.date == item.date); } var newestPosts = posts.Where(filter); 

从记忆中,这样的事情应该做到

 var data = context.Posts.Group(p => p.Type) .Select(g => new { Type = g.Key, Date = g.OrderByDescending(p => p.Date) .FirstOrDefault() } 

这会给你一个新的匿名类型,但你总是可以将它映射到一个类

上述就是C#学习教程:entity framework按日期选择每个组中的一个分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998509.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐