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