我大力搜索了这个答案,但我无法找到(或理解)一个解决方案。我有一个查询,我正在加入另一个可能有或没有相关记录的表。这是查询:
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表。您想查询以下内容:
-customer姓氏 - 顾客的名字 -customer最近的订单ID
但是,您注册的客户从未购买过任何东西。我确信我正在做一些完全无声的事情,所以任何帮助都非常感激。谢谢!
答案 0 :(得分:0)
所以你有一些事情在这里发生:
解决方案是什么? 我创建了一个部分类来为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;
}
}
}
答案 1 :(得分:0)
以下代码行似乎正在运作。
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)}
我假设它说“如果没有任何东西替换字符串”NO ATTACHMENT“否则使用DB中的内容”
这可以接受吗?到现在为止还挺好。谢谢!