我是使用MVC和LINQ to Entity的新手。我不知道如何从多个表中选择列值,并为每个表定义导航属性。
以下是表格的结构:
表:MasterTable
字段:MasterID(PK),CaseNumber,Status,[OtherFields ....]
导航属性:DetailsTable,客户端
表:详情表
字段:DetailsID(PK),MasterID(FK),InsuranceId(FK),DetailsStatus
导航属性:MasterTable,保险
表:客户
字段:CustID(PK),CustFName,CustFName,Address_id,Phone_id,MasterID(FK)
导航属性:订单,地址,电话
表:保险
字段:InsuranceId(PK),InsuranceName,Address1,Address2,ZipCode,State
导航属性:Customers,DetailsTable,Addresses
表:地址
字段:Address_id(PK),Address1,Address2,ZipCode,State
导航属性:状态
表:国家
字段:State_id(PK),StateAbbrev
导航属性:国家/地区
表:手机
字段:Phone_id(PK),Home,Work,Mobile
我如何能够提取详细数据:
- CaseNumber,MasterTable的状态
- InsuranceName,Address1,Address2,ZipCode,保险表中的状态(基于DetailsTable中的InsuranceId )
- DetailsTable中的DetailsStatus - 来自Customers表的CustFName,CustFName,Address1,Address2,ZipCode,State(*基于Customers.MasterID = MasterTable.MasterID *)
感谢。
答案 0 :(得分:1)
这只是投影,看起来像:
var query = from master in dbContext.MasterTables
select {
master.CaseNumber,
master.Status,
Details = master.DetailTables.Select(detail => new {
detail.DetailStatus,
detail.Insurance.InsuranceName,
detail.Insurance.Address1,
detail.Insurance.Address2,
detail.Insurance.ZipCode,
detail.Insurance.State
},
Customers = master.Clients.Select(customer => new {
customer.CustFName,
customer.CustLName,
customer.Address.Address1,
customer.Address.Address2,
customer.Address.ZipCode,
customer.Address.State
}
};
我不确定它是否正是您想要的,但它应该会让您知道如何进行此类查询。此查询使用匿名类型进行投影,但您也可以使用自定义视图模型。
您也可以这样做:
var query = dbContext.MasterTables
.Include(m => m.Clients)
.Include(m => m.DetailsTables.Select(d => d.Insurance));
它只会将所有相关客户,详细信息和保险的主数据加载。之后,您可以在代码中进行投影或直接在视图中使用您的实体。
它会