【问题标题】:How to simplify this LINQ Query with Distinct on each column into a single statement如何在每列上使用 Distinct 将这个 LINQ 查询简化为单个语句
【发布时间】:2009-03-06 01:54:51
【问题描述】:

这是我的 LINQ 查询,它获取每个选定列的唯一值并将它们作为列表存储在字典中。

var serialTable = serialNoAdapter.GetData();
var distinctValue = (from row in serialTable
                    select new
                    {
                        row.CodePractice,
                       row.LockType,
                       row.Software
                    }).Distinct().ToList();
var softwareValue = distinctValue.Select(p => p.Software).Distinct().ToList();
var codeValue = distinctValue.Select(p => p.CodePractice).Distinct().ToList();
var lockValue = distinctValue.Select(p => p.LockType).Distinct().ToList();

return new Dictionary<string, List<string>>()
       {
           {"software", softwareValue},
           {"codepractice", codeValue},
           {"locktype", lockValue}
       };

唯一的问题是它被分解成几个语句。我的问题是是否可以简化它并将其压缩为单个语句?

【问题讨论】:

    标签: linq


    【解决方案1】:

    我相信您可以通过省略中间步骤来大大简化它。

    var softwareValue = serialTable.Select(p => p.Software).Distinct().ToList();
    var codeValue = serialTable.Select(p => p.CodePractice).Distinct().ToList();
    var lockValue = serialTable.Select(p => p.LockType).Distinct().ToList();
    
    return new Dictionary<string, List<string>>()
           {
               {"software", softwareValue},
               {"codepractice", codeValue},
               {"locktype", lockValue}
           };
    

    也许其他人可以进一步改进。

    【讨论】:

    • 使用这种方法,我认为您正在查询数据库 3 次而不是 1 次...是这样吗?
    • 可能。这是否重要,以及如何正确优化,将取决于您的具体情况。带有真实数据的个人资料。
    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多