我想我正在用方轮重新发明轮子(也许有一个更优雅的解决方案)。我需要该方法来返回已跨多个表组合的所有对象的列表:
public List<Address> GetAddress()
{
using (var db = new CrmDbContext())
{
var address = from a in db.Addresses
join City in db.Cities on a.CityId equals City.CityId
join Area in db.Areas on a.AreaId equals Area.AreaId
select a;
List<Address> result = address.ToList();
return result;
}
}
如果我这样输出:
foreach(var address in addressModel.GetAddress())
{
WriteLine(address.City.CityName);
}
然后 Exxeption 对我来说崩溃了
System.NullReferenceException:“未将对象引用设置为对象的实例。”
我这样做很可能是徒劳的。但我想在一个单独的类中存储一个用于显示对象(例如地址)的方法,并通过该方法显示它。
你为什么不想使用这些方法
Linq
?例如,假设您有一张桌子UserEntity
:还有电话表
PhoneEntity
:让我们把它们连接起来
один-ко-многим
。UserEntity
:还有手机本身
PhoneEntity
:现在我怎样才能把它全部拿出来并将其链接到
UserEntity
他的所有手机PhoneEntity
:这里我们使用
.Include()
,与使用类似LEFT JOIN
接下来,假设您的手机上仍然附加了一本通讯录(
PhoneEntity
->ContactEntity
howone-to-many
),那么将其组合在一起的请求将如下所示:接下来,作为示例,我们可以更改 UserEntity,如下所示:
我们如何将所有数据整合在一起?像这样:
进一步来说,凡事都是类推。这对于你想要的东西来说是一个很好的类比。
PS:我没有直接回答你的问题,只是提供信息,以便你理解这些概念,并能够学习这些材料并自己解决问题
UPD:如果您想进行获取,请使用该方法
.Where()
,这是最后一个代码示例的用法示例:Linq
默认情况下,它执行“惰性”选择,不包括结果中相关表中的值。您需要明确指定哪些选择字段指向您想要使用Include
. 例如,如另一个答案中通过“对象”样式和“点”表示法给出的那样。但是,据我从英语 SO 的答案中了解到,
Include
您可以将它与您的sql
-style 查询一起使用。这应该有效: