更具体地说,请参见下面的代码,我希望它始终返回QuestionName和NodeID(它们将始终在一起),但是当没有QuestionTracking时,我希望它说“未尝试”。 但是到目前为止,如果存在问题跟踪,我只会从该查询中获得结果。 如果并且在左联接上没有数据时,如何在该字符串中获得“未尝试”?

public IQueryable<QuestionSummary> GetFullCourseQuestions(int CourseID, int RevisionID, int UserID)
{
    return (from n in db.CourseNodes
            join a in db.Assets on n.AssetID equals a.AssetID
            join q in db.Questions on a.AssetID equals q.AssetID
            join qt in db.QuestionTrackings on q.QuestionID equals qt.QuestionID into qu
            where n.CourseID == CourseID && n.CourseRevisionID == RevisionID
            from qtu in qu.DefaultIfEmpty()
            where qtu.UserID == UserID
            select new QuestionSummary
            {
                QuestionText = q.QuestionName,
                NodeID = n.CourseNodeID,
                AnswerStatus = (qtu.IsCorrect == null) ? "Not Attempted" : (qtu.IsCorrect) ? "Correct" : "Incorrect"
            });
}

#1楼 票数:1 已采纳

在我看来,问题可能出在您的where子句中:

where qtu.UserID == UserID

由于当DefaultIfEmpty启动时,您的qtu对象将不包含有效的UserId

#2楼 票数:0

我认为qtu.defaultifempty将为默认值返回null,因此,当您检查qtu.userid时未报告异常这一事实表明,您可能会加入错误的表。 这意味着,在您测试的数据中,所有问题都有问题跟踪。 我不知道您数据库的结构,但也许您也可以尝试将外部联接用于其他联接? (很抱歉,缺少格式,移动网站没有格式按钮)

  ask by MetaGuru translate from so

未解决问题?本站智能推荐:

2回复

如何在Linq中离开而不是内部联接到SQL导航属性生成的查询

当我从Linq to SQL中的父对象中选择时,我将获得父表中的所有记录。 但是,当我还选择导航属性(从具有1:1关系和共享主键的扩展表中)时,我仅获得填充了该导航属性的记录。 我如何使用Navigation属性从父级获取所有记录,而不管是否填充了子级? (即左连接而不是内部连接)? L
2回复

Linq查询在SQL中生成不同的结果

我在 LINQ 中编写了这个 left join 并且我只从SHPerson表中选择了PersonId ,但是在 SQL Server profiler 中,我也从SHPFA表中获得了PersonId 。 我不希望在查询中选择SHPFA.PersonId ([t0].[PersonId])。
1回复

LINQ2SQL:在LINQ2SQL语句的左联接中再添加一个表

我是LINQ 2 SQL的新手,需要帮助来创建左联接查询。 我有下面的LINQ 2 SQL查询来从2个表中获取数据。现在我想将另一个表与此表左连接。一个名为“ SerialId”的列与“ IV00200s”表中的SerialId列相关联 谁能帮我写这个陈述
1回复

在一个Linq-to-SQL语句中,Linq-to-SQL左联接为左联接/多个左联接

我正在尝试将SQL过程重写为Linq,只要运行在小型数据集上,一切都运行良好且运行良好。 我真的在任何地方都找不到答案。 是的,我在查询中有3个联接,2个是left joins ,1个是inner join left joins ,它们都彼此left joins /就像一棵树。 在下面您可
1回复

Linq2sql优化左联接以获取仅存在于1个容器中的项目

我想从一个容器中获取另一个容器中不存在的物品。 一个容器是IEnumerable,另一个是DB中的实体。 例如 这种方法有效,但我意识到基础sql类似于SELECT id FROM [Users] 。 那不是我想要的。 更改为 改进了基础查询,并添加了WHERE [id] IN
2回复

具有内部联接和2个左联接的SQL到Linq转换(带有子查询)

我有以下查询,在SSMS中工作正常。 我使用的是LinqPad( C# ),但对于使用LinqToSql的左外部联接成功,确实感到困惑: 如您所见,这并不是开始工作时最优雅的查询,而且我同意可以改善两个左联接中的子查询。 但是,您能帮我翻译一下吗?
1回复

使用导航属性将T-SQL转换为LINQtoSQL

我似乎无法想出正确对应的LINQ to SQL语句来生成以下T-SQL。 基本上,我试图只返回客户地址中的一个付款信息...如果AR地址存在,则返回主要地址(如果存在),然后是任何地址。 我们正在使用Repository Pattern访问数据库,所以在Payment Repository
2回复

Linq,左联接和日期

所以我的情况是我有一个linq-to-sql模型,该模型不允许日期在我的一张表中为空。 这是有意的,因为数据库不允许该字段中的空值。 我的问题是,当我尝试使用该模型编写Linq查询时,由于该日期不是“可为空”字段,因此无法再对该表进行左联接,因此无法将其与“无”进行比较。 示例:有一个电