我有一个嵌套的linq
到sql
查询,用于填充treeview
。绑定(bind)到 treeview
时的第一个选择(Title
字段)正确显示所有 Titles
,但如果出现多次,我想要它出现一次。我该如何解决这个问题?
我试过了
}).Distinct().OrderBy(c => c.LineNumber)
}).Distinct();
完整查询
var results =
(from d in mContext.Docs
orderby d.Title ascending
join b in mContext.Base on d.DocId equals b.DocId
join h in mContext.ViewDocItems on b.BaseId equals h.BaseId
where h.ItemId == mGuid
select new
{
Id = d.DocId,
Title = d.Title,
ClassId = d.ClassId,
BaseHis =
(from c in d.Base
select new BaseHistory()
{
BaseId = c.BaseId,
Name = c.Title,
BaseFinal = c.Final.Value,
LineNumber = c.LineNumber.Value
ItemId = h.ItemId
}).Distinct().OrderBy(c => c.LineNumber)
});
foreach(var r in results)
{
var hist = new DocHistory()
{
Id = r.Id,
Title = r.Title,
ClassId = r.ClassId;
};
foreach(var h in r.BaseHis)
{
hist.BaseHis.Add(h);
}
mHistory.Add(hist);
}
最佳答案
将 Distinct()
替换为
.GroupBy(x => x.Name).Select(x => x.FirstOrDefault())
这意味着您对Name
(即Title
)进行分组,然后获取每个组的第一个元素。
Distinct 不起作用,因为转换为 SQL 后,它会过滤掉 BaseId
、Title
的每个值具有唯一值的所有记录,等等
关于c# - Linq 查询和预期结果 -- 不同字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447962/