【问题标题】:What is the proper way to use linq Group operators to Flatten Query Results使用 linq Group 运算符展平查询结果的正确方法是什么
【发布时间】:2015-09-24 13:45:18
【问题描述】:

这是数据结构,我从 NHibernate Query 中返回

public Class PaperResult 
{
    public Guid SubjectId {get;set}

    public Guid StudentId {get;set}

    public string Name {get;set}

    public string Email {get;set}

    public int Marks {get;set}

}

我的查询是

  1. var resultEntities = _repository.Query().where(t => t.Id == testId)
  2. studentResults = resultEntities.GroupBy(x => x.StudentId)

返回,IQueryable,现在我将它投影到类中

public Class StudentResult 
{
    public Guid StudentId {get;set}

    public string Name {get;set}

    public string Email {get;set}

    public int Marks {get;set}

    public IEnumerable<PaperResult> PaperResults {get;set;}
}

我尝试使用下面的 linq 将结果展平,但 Nhibernate 抛出 “方法或操作未实现。”

from paperResult in studentResults
let studentResult  = paperResult.First()
select new StudentResult()
{
    StudentId =studentResult.StudentId,
    Name =studentResult.Name,
    Email =studentResult.Email,
    Marks =studentResult.Marks,
    PaperResults =resultEntities.Where(x => x.StudentId ==studentResult.StudentId
                  select new PaperResult(){...}.ToList()
}

注意:代码是骨架代码。

问候,

【问题讨论】:

  • 你必须执行 resultEntities.toList()。在将对象映射到 StudentResult 之前。
  • 通常,在 LINQ 中展平数据结构的“正确”方法是通过 SelectMany() 运算符。你当然应该看看它,我不确定 Nhibernate 是否支持它。 :)
  • @HemantMalpote 对延迟结果执行 ToList() 将在内存中获取我想要避免的数据,因为它会导致性能问题。
  • @DotNetHitMan 任何参考请??
  • @SrinivasRa - blogs.interknowlogy.com/2008/10/10/… 是一篇好文章。如果您需要有关数据的示例,我可以敲一个。

标签: c# linq nhibernate


【解决方案1】:

您应该能够对匿名类型进行投影。

然后投影到您想要的类型: q.AsEnumerable().Select(...)

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 2016-12-16
    • 1970-01-01
    • 2021-01-21
    • 2013-10-29
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多