c# - Linq 查询和预期结果 -- 不同字段

标签 c# wpf linq linq-to-sql

我有一个嵌套的linqsql查询,用于填充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 后,它会过滤掉 BaseIdTitle每个值具有唯一值的所有记录,等等

关于c# - Linq 查询和预期结果 -- 不同字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16447962/

相关文章:

c# - 无法加载文件或程序集 System.Threading.Tasks,版本 = 2.5.19.0

c# - 如何使用 LINQ 表达式从模拟存储库返回新对象?

c# - 起订量 : how can mock property and side Effect?

c# - 从只接受类类型的方法动态返回一个对象

wpf - 将 ViewModel 放在代码隐藏中是错误的吗?

wpf根据数据应用静态资源

c# - ASP.NET Core appsettings.json 未加载正确的设置

c# - KeyEventArgs.Key 到 char

c# - 我需要使用 MultipleActiveResultSets 功能吗?

linq - 无法创建类型 (type) 的常量值 在此上下文中仅支持原始类型 ('such as Int32, String, and Guid' )