为了账号安全,请及时绑定邮箱和手机立即绑定

linq groupby 加上选择返回元素类型而不是值

linq groupby 加上选择返回元素类型而不是值

C#
慕仙森 2022-06-19 10:27:55
新手 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()


查看完整回答
反对 回复 2022-06-19
?
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的原因。


查看完整回答
反对 回复 2022-06-19
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号