【问题标题】:Linq group by an entity and then order by the grouped (nullable) entityLinq 按实体分组,然后按分组(可为空)实体排序
【发布时间】:2011-10-14 04:15:02
【问题描述】:

我正在尝试从类似这样的现有数据库设计构建调查引擎。

Survey - Not so Relavent
========================
SurveyID
SurveyName

SurveyQuestionCategories
=========================
SurveyQuestionCategoryID
SurveyQuestionCategory
SurveyID
RecordOrder

SurveyQuestions
================
SurveyQuestionID
SurveyQuestion
SurveyID
SurveyQuestionCategoryID
RecordOrder

基本上,调查总会有一个问题列表,但调查可能有也可能没有问题类别。我想要做的是有一个 linq 查询,它将提取按类别分组的调查的所有问题(如果它们存在),并首先按类别记录顺序(如果它们存在)对它们进行排序,然后是问题记录顺序。到目前为止,我已经得到了类似的东西。 (假设变量 CurrentSurvey 持有代表当前显示调查的实体)

       Dim AllQuestions = From sq In CurrentSurvey.SurveyQuestions
                       Order By sq.RecordOrder
                       Group sq By Key = sq.SurveyQuestionCategory Into Group
                       Select QuestionCategory = Key, Questions = Group

这很好用,因为分组处理按 NULL SurveyQuestionCategory 分组。现在的问题是当我将查询更改为此时。

Dim AllQuestions = From sq In CurrentSurvey.SurveyQuestions
                   Order By sq.RecordOrder
                   Group sq By Key = sq.SurveyQuestionCategory Into Group
                   Order By Key.RecordOrder
                   Select QuestionCategory = Key, Questions = Group

Order By Key.RecordOrder 行抛出空引用异常,我可以理解原因。有人可以通过修改这个查询来建议如何解决这个问题吗?我对 LINQ 相当陌生,在 VB .Net 中编写这个项目的必要性没有帮助。 :-)

您知道,我愿意采取另一种方法来解决这个问题。我也已经尝试过左外连接,但我对这种方法的排序感到困惑。这是我的备用查询。

Dim AllSurveyQuestions = (From sq In CurrentSurvey.SurveyQuestions Group Join qc In CurrentSurvey.SurveyQuestionCategories
                         On sq.SurveysNEW Equals qc.SurveysNEW Into sqc = Group
                         From qc In sqc.DefaultIfEmpty()
                         Select sq Order By sq.RecordOrder).Distinct()

提前感谢您的帮助。

【问题讨论】:

    标签: asp.net vb.net linq entity-framework-4


    【解决方案1】:

    这是一个想法,但未经测试:

    Dim AllQuestions = From sq In CurrentSurvey.SurveyQuestions
                       Order By sq.RecordOrder
                       Group sq By Key = sq.SurveyQuestionCategory Into Group
                       Select QuestionCategory = Key, Questions = Group, 
                              CategoryOrder = If(Key Is Nothing, -1, Key.RecordOrder)
                       Order By CategoryOrder
    

    我假设 RecordOrder 是一个整数,如果没有类别,则输入 -1,这样的问题会首先出现。现在如果这是一个 LinqToSql 查询,可能 If 条件不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多