如何在linq中使用distinct来表示非键字段

时间:2013-07-16 05:44:57

标签: linq c#-4.0 entity-framework-4

如何使用linq获得低于结果?

key  salesID  prodname
1    2566     a
2    2566     b
3    3647     c
4    3012     d

结果

  salesID   prodname
    2566     b
    3647     c
    3012     d

我希望清除所有重复salesID并使用此代码但不起作用

  var n = (from p in context.ArefSms where p.Stautos != true select p).Distinct().OrderBy(x => x.SalesID).ToList();

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用GroupBy

var result = context.MyTable
                    .GroupBy(x => x.Field1)
                    .Select(g => new { Field1 = g.Key,
                                       Field2 = g.First().Field2 });

这可能会给出“a”或者它可能会为Field2值提供“b”...您还没有说清楚这是否重要,或者Field1的重复值是多少基本上应该处理。

编辑:所以对于你的真实财产,我怀疑你想要:

var query = context.ArefSms
                   .Where(p => !p.Stautos)
                   .GroupBy(p => p.SalesID)
                   .Select(g => new { SalesID = g.Key,
                                      ProdName = g.First().ProdName })
                   .OrderBy(x => x.SalesID);