[英]Entity Framework - Handling a join with no records from join table
我一直在努力寻找答案,但是找不到(或理解)解决方案。 我有一个查询,我要联接到另一个可能有关联记录的表。 这是查询:
var educationUniversity = result.new_educationUniversity.Select(c => new
{ c.majorDegree, c.dateEnd, c.dateStart, c.institutionName,
c.degreeProgramCompletionStatus, c.institutionAddress,
attachmentId = c.attachmentId ?? 0,
fileName = c.new_attachments.fileName ?? "No Attachment"}).ToList();
第一个表是“ new_educationUniversity”,其中包含用户的大学或大学学位的详细信息。 用户可能已上传或未上传附件(该附件存储在“ new_attachments”表中)。 attchmentID是“ new_attachments”表中的主键,而是“ new_educationUniversity”表中的外键。 EF看到了这种关系。
我将结果绑定到中继器,但是如果没有相关的附件,代码将在上面的行中失败。 如果有附件或删除对fileName的引用,则一切正常。
上面,我正在处理fileName是否为NULL(或者至少我尝试这样做),但是我怀疑我的问题是该记录根本不存在,这与我猜想的NULL不同。 我尝试使用类似的东西:c.new_attachments.fileName.SingleOrDefault()或DefaultIfEmpty(),但是没有运气。
打个比方,假设您有一个CUSTOMERS表和一个ORDERS表。 您要查询以下内容:
-客户姓氏-客户名字-客户最近的订单ID
但是,您已经注册了从未购买任何产品的客户。 我确定我所做的事情完全毫无意义,因此,我们非常感谢您的协助。 谢谢!
因此,您在这里发生了一些事情:
有什么解决方案? 我将创建一个局部类,以向您的new_educationUniversity类添加新属性。 添加一个null-reference-safe属性引用,以确定new_educationUniversity的new_attachments属性的文件名。 然后,将转发器绑定到新属性。 就像是:
public partial class new_educationUniversity {
public String AttachmentFileName {
get {
if (new_attachments == null)
return "";
else
return new_attachments.fileName;
}
}
}
以下代码行似乎有效。
var educationUniversity = result.new_educationUniversity.Select
(c => new { c.majorDegree, c.dateEnd, c.dateStart, c.institutionName,
c.degreeProgramCompletionStatus, c.institutionAddress, attachmentId = c.attachmentId ?? 0,
fileName = (c.new_attachments == null ? "***NO ATTACHMENT***" : c.new_attachments.fileName)}).ToList();
我不完全了解此行的含义:
fileName = (c.new_attachments == null ? "***NO ATTACHMENT***" : c.new_attachments.fileName)}
我认为它说:“如果无所不有与字符串替换‘没有附件’,否则用的是在DB”
这可以接受吗? 到现在为止还挺好。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.