我有一个随时间变化的linq查询。
当前版本捕获一堆行(可以重复),按PageId
对其进行分组,然后在Volume
上对其进行排序,并选择每个组中的第一项。分组的结果将输出到新类。
查询以两个相邻的Select语句结束。感觉很“错”,但是我尝试了各种方式来组合两个Select语句,特别是尝试将第二个.Select()
嵌入到.First()
中-是否有可能变得简洁吗?
这是我尝试进行更改时遇到的错误之一:
Cannot convert lambda expression to intended delegate type because some of the elements in the block are not implicitly convertible to the delegate return type.
查询。
var result = Base.View.Query<Keyword>(query, inc => inc.Page)
.GroupBy(g => g.PageId)
.Select(g => g.OrderByDescending(o => o.Volume).First())
.Select(r => new LinkDTO(
r.Term.ToLower().HighlightExcept(reservedWords),
currentUrl.ToAbsolute(r.Page.Path)));
答案 0 :(得分:1)
可以将选择仅合并为1
var result = Base.View.Query<Keyword>(query, inc => inc.Page)
.GroupBy(g => g.PageId)
.Select(g => new LinkDTO(
g.OrderByDescending(o => o.Volume).First().Term.ToLower().HighlightExcept(reservedWords),
currentUrl.ToAbsolute(g.OrderByDescending(o => o.Volume).First().Page.Path))
现在比第一个更具可读性吗?我不同意。