c# - 第 1 列或第 2 列在同一个表上具有 2 个连接的实体框架
问题描述
我正在尝试构建一个 EF 查询以返回第 1 列或第 2 列。
第 1 列是根据查询的关系/连接从不同的表中提取的。
第 2 列是从连接表中拉出的。
这是一个调查/回答模型。有些答案是硬编码的(例如用户从列表中选择),有些是自由文本。
自由文本保存在一个表中,用户选择的值存储在另一个表中。
最终目标是开设一个带有问题和答案的 POCO 课程:
public class SurveyResponse
{
public string Question { get; set; }
public string Answer { get; set; }
}
我的查询看起来像:
var surveyResponses = (from ias in dataContext.AnswerSet
join answer in dataContext.Answer on ias.AnswerSetID equals answer.AnswerSetID
join oa in dataContext.OptionalAnswer on answer.PossibleAnswerID equals oa.OptionalAnswerID // this line loses valuetext answer
where ias.LeadID.Equals(dbLead.leadID)
select new SurveyResponse() { Question = "question(todo)", Answer = (answer.ValueText != "" ? answer.ValueText : oa.Title)}).ToList();
这里有一些数据显示了为什么 optionalanswer 上的连接丢失了最后一行
PossibleAnswerID ValueText
979D3ADF-4F9C-4F4D-AC9C-034CE960003A
EF488701-683D-4855-A9A7-7F9D78468E63
D442F616-6D4B-4176-9F08-133E2C655BE4
5FD57A95-B385-4CAE-ADAB-1711CEA00A08
NULL Questions about sales
解决方案
显然您的查询inner join
在 sql 中生成,因此它Answer
用 empty消除PossibleAnswerID
。因此,您只需将其更改为left join
. 可以这样做
var surveyResponses =
(from ias in dataContext.AnswerSet
join answer in dataContext.Answer on ias.AnswerSetID equals answer.AnswerSetID
join oa in dataContext.OptionalAnswer on answer.PossibleAnswerID equals oa.OptionalAnswerID into optans // this line loses valuetext answer
from oa in optans.DefaultIfEmpty()
where ias.LeadID.Equals(dbLead.leadID)
select new SurveyResponse() { Question = "question(todo)", Answer = (answer.ValueText != "" ? answer.ValueText : oa.Title)}).ToList();
推荐阅读
- join - Apache Flink:两个(或多个)任务管理器之间的共享状态
- bash - 将标题添加到 csv 文件的问题
- arrays - 如何加快 xmlhttp 请求 (VBA)?我应该使用数组吗?
- arrays - 从列表字典中解析数据
- xcode - 指定要使用 XIB 中的图像的 .xcassets 目录
- php - CakePHP 3.5:如何使用 php 将 xml 响应转换为应用程序响应
- django - 如何解决我的 Django 项目中的完整性错误
- docker - 为什么 kubernetes pod 无法运行 docker image
- javascript - 标题中的 ReactNativeElements 按钮在 iPhone 上不可点击。(剩下)
- html - 在 R Viewer 中显示多个 DT 表