【发布时间】:2022-12-17 13:12:23
【问题描述】:
我对 LINQ GroupBy 函数有疑问。我注意到,虽然使用了相同的分组函数,但结果因模型而异。
我从数据库中读取了很多数据集到一个称为数据的变量中。此列表包含约 12.000 个元素,我想按卡 ID、日期以及用户的名字和姓氏对其进行分组。问题是,当我使用像下面的 GroupListModel 这样的“模型”时,结果并不像预期的那样。
GroupListModel 如下所示:
public class GroupListModel
{
public string CardId { get; set; }
public DateTime Date { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
例如,我的第一个 GroupBy 语句是:
data.GroupBy(x => new GroupListModel
{
CardId = x.CardId,
Date = x.Date.Value,
FirstName = esdUsersForTheDepartments
.Where(y=>y.CardId.Equals(x.CardId))
.FirstOrDefault()?
.FirstName,
LastName = esdUsersForTheDepartments
.Where(y => y.CardId.Equals(x.CardId))
.FirstOrDefault()?
.LastName
}).ToList();
我的第二个 GroupBy 语句没有模型创建方法:
data.GroupBy(x => new
{
CardId = x.CardId,
Date = x.Date.Value,
FirstName = esdUsersForTheDepartments
.Where(y => y.CardId.Equals(x.CardId))
.FirstOrDefault()?
.FirstName,
LastName = esdUsersForTheDepartments
.Where(y => y.CardId.Equals(x.CardId))
.FirstOrDefault()?
.LastName
}).ToList();
我注意到,声明 1 中的 Group-Function 在我看来返回了错误的结果。第二个按预期工作。
有人可以向我解释这种行为吗?
【问题讨论】:
-
我们可以看看
GroupListModel的定义吗? -
@RomanRyzhiy - 我添加了它。
-
new {}是C#中的一种特殊的匿名类型,内部会对其进行分析,所以GroupBy()可以使用其中定义的所有属性。当你用一个具体的类替换它时,分析将不再发生,GroupBy()将通过它们的引用而不是它们的属性来比较不同的实例。