【问题标题】:Linq return type conversionLinq 返回类型转换
【发布时间】:2015-01-13 12:42:15
【问题描述】:

我有一个如下的 linq 查询,

    var result =
                    from Record in DBContext.GetAll().
                    group new { Record.Filed1, Record.Field2} by Record.Field3
                        into newGroup
                        select new
                        {
                            BodyRegion = newGroup.Key,
                            ByScanner =
                                from exam in newGroup
                                group exam.MaxValue by exam.Model
                                    into myGroup
                                    select myGroup,

                            ByExam =
                                from exam in newGroup
                                group exam.MaxValue by exam.Protocol
                                    into myGroup2
                                    select myGroup2
};

然后我遍历它们,

 foreach (var rec in result)
            { 
                foreach (var byScanner in rec.ByScanner)
                  {
                     ProcessResult(byScanner.Key, byScanner.ToList());
                  }
                foreach (var byExam in rec.ByExam )
                  {
                     ProcessResult(byExam.Key, byExam.ToList());
                  }
            }

一切正常。 但是我想将 Linq 查询(第一个代码 sn-p)移动到一个函数中,该函数的返回类型应该是什么? 函数的返回类型不能是 var。如果我给 IEnumerable 那么在迭代时我无法访问 rec.ByScanner, rec.ByExam 因为 Object 不包含它们. 如何解决这个问题?

编辑: 我尝试创建一个新类并填充它们。但分组属性 byScanner.Key, byScanner.ToList() 不可访问。如何解决?

【问题讨论】:

  • 创建一个类并填充它,而不是获取anonymous type
  • 请看 EDIT 部分,我试着做你的解决方案。然后我就遇到了上述问题。

标签: c# linq


【解决方案1】:

您使用的是Anonymous Type。这些不应该被传递给方法。

您可以做的一件事是创建(我们称之为“记录”)一个具有属性BodyRegionByScannerByExam 的类并传递IEnumerable<Record>

【讨论】:

  • 请看 EDIT 部分,我试着做你的解决方案。然后我就遇到了上述问题。
  • BodyRegion、ByScanner 和 ByExam 属性的类型应该是什么?
  • ByScanner 显然是一个集合。你不知道吗?另外,在继续之前。这个 Records 类是否具有实际意义(记录是具有这些属性的实际事物)还是只是您使用 linq 选择数据以使代码工作的方式?
  • 不,它没有任何这样的含义,它只是对linq结果进行分组的方式。但是现在我发现那边的返回类型是,IEnumerable<System.Linq.IGrouping<string,System.Nullable<decimal>>>
  • 那是个问题。您遇到的问题(以及您为解决这些问题而引入的复杂性)是试图传递结构不良的数据的副作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 2021-07-30
  • 2020-11-24
  • 2019-08-13
相关资源
最近更新 更多