【问题标题】:EF Select records distinct by one field from EntityEF 选择与实体有一个字段不同的记录
【发布时间】:2019-11-05 19:38:38
【问题描述】:

我需要“翻译”这段代码示例:

using var db = new MyDbContext();
var simple_linq = db.USERS.GroupBy(u => u.id_employee).Select(u => u.FirstOrDefault()).ToList(); //it's worked fine for me

与动态 LINQ 相同的代码。我试过了:

var dynamic_linq = db.USERS.GroupBy(groupBy, "it").Select("it"); // but I need Dynamic LINQ

我在dynamic_linq 中收到一个USERS 对象(对我来说非常重要),但不知道如何获得唯一的USERS,不知道如何使用FirstOrDefault() 动态 LINQ 中的函数,不知道如何将结果转换为 List。不知道其他解决方案。

我也尝试使用MoreLinq 库中的DistinctBy(),但它不能与动态表达式一起使用。

有什么想法吗?

【问题讨论】:

  • 您是否需要您的Select 是动态的,或者您可以只使用普通的Select 吗?另外,如果你做Select("it.FirstOrDefault()")怎么办?您使用的是什么动态 LINQ 包?
  • @NetMage 我可以使用普通的Select,动态的必须是GroupBy。当我尝试使用Select("it.FirstOrDefault()" 时出现错误。使用System.Linq.Dynamic
  • @NetMage 错误文本:“不存在适用的聚合方法 'FirstOrDefault'”。

标签: c# entity-framework linq group-by dynamic-linq


【解决方案1】:

当使用System.Linq.Dynamic.Core时,你应该可以使用这个代码:

var users = new[] { new { id_employee = 1, name = "a"  }, new { id_employee = 1, name = "b"  } }.AsQueryable();

var simple_linq = users.GroupBy(u => u.id_employee).Select(u => u.FirstOrDefault()).ToList();
simple_linq.Dump();

var dynamic_linq = users.GroupBy("id_employee", "it").Select("it.FirstOrDefault()");
dynamic_linq.Dump();

【讨论】:

  • 非常感谢。我将尝试使用您的代码示例并写下结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多