【问题标题】:how to use distinct in linq for Non-key field [closed]如何在 linq 中为非关键字段使用 distinct [关闭]
【发布时间】:2013-07-16 14:22:20
【问题描述】:

如何使用 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();

【问题讨论】:

  • 再说一次,说“不起作用”并不能告诉我们发生了什么。你必须开始提供更多信息。请阅读tinyurl.com/so-hints - 我们目前无法为您提供帮助。
  • 我有这个查询的所有记录
  • 好的,那么当您在我的回答中使用GroupBy 方法时发生了什么?获取关于这个问题的信息就像拔牙:(
  • 你的问题我什么都没有

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


【解决方案1】:

最简单的方法大概是使用GroupBy

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

对于Field2 值,这可能会给出“a”或者可能会给出“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);

【讨论】:

  • a 或 b 不重要,我测试您的查询不起作用
  • @user2304094:“不起作用”不是几乎足够的信息。究竟会发生什么?如果我们能够帮助您,您需要提供更多信息...
  • 这是我真正的查询(来自 p in context.ArefSms where p.Stautos != true select p).OrderBy( x => x.SalesID).Distinct().ToList();
  • 你的查询 = var result = context.ArefSms .GroupBy(x => x.SalesID) .Select(g => new { Field2 = g.First().ProdName });跨度>
  • @user2304094:会发生什么?请注意,您已删除 where p.Stautos != trueToList 调用。 (在查询表达式后面加上OrderBy 以及与布尔常量的比较也很奇怪......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2012-03-03
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多