新手 C#、资深 DBA 和 LINQ 新手。我试图了解为什么 groupBy 上下文中的 select 子句返回类型名称(在本例中为“System.Linq.Enumerable+WhereSelectEnumerableIterator`2[CasesReportParser.Requisition,System.String]”)而不是字段值。我相信,我最终的困惑通常是如何在 groupBy 结果中包含其他字段,而这些附加字段没有被分组(在 g.Key 中不可用)。这是代码,它是返回类型名称的最后一行的条件 ExamType。谢谢你。var ListFinal = rows .GroupBy(l => new { ExamDate = ParseDate(l.ExamDate), l.PatientID, l.PatientFirst, l.PatientLast, l.Birthdate, l.SiteName }) .Select(g => new { //ExamDate = g.Select(l => l.ExamDate),//.ToString().Substring(0,10), //.ToString().Split(' ')[0] ExamDate = g.Key.ExamDate, PatientID = g.Key.PatientID, PatientFirst = g.Key.PatientFirst, PatientLast = g.Key.PatientLast, Birthdate = g.Key.Birthdate, SiteName = g.Key.SiteName, ReqCount = g.Select(l => l.RequisitionNumber).Distinct().Count(), ExamCount = g.Select(l => l.ExamID).Distinct().Count(), ExamType = (g.Select(l => l.ExamID).Distinct().Count()>1 ? "multiple" : g.Select(l => l.ExamType).ToString()) });
2 回答

慕码人2483693
TA贡献1860条经验 获得超9个赞
您可能想要添加.First
,因为它正在返回一个集合。
g.Select(l => l.ExamType).First().ToString()

ITMISS
TA贡献1871条经验 获得超8个赞
First of根本Select不返回任何元素。事实上,它甚至不返回一个集合,而是一个可以迭代集合 的迭代器。
所以仅仅调用Select一个集合根本不会做任何事情,只有调用MoveNext那个迭代器才会执行查询。这可以通过许多不同的方式来完成,其中一种是通过调用Firstor FirstOrDefault,这似乎是您应该在您的情况下使用的方式。First如果没有返回任何元素,将抛出异常,FirstOrDefault但是将返回迭代器类型的默认值(null对于引用类型)。
话虽如此,您可能需要在您的Select:
ExamType = g.Select(l => l.ExamID).Distinct().Count() > 1 ?
"multiple" :
g.FirstOrDefault(l => l.ExamType)?.ToString()
正如FirstOrDefault可能返回的那样null,您会得到 NullReferenceException,这就是您应该使用?.-operator的原因。
- 2 回答
- 0 关注
- 160 浏览
添加回答
举报
0/150
提交
取消