0

我是使用 MVC 和 LINQ to Entity 的新手。我不知道如何从为每个表定义的导航属性的多个表中选择列值。

下面是表的结构:

表:MasterTable
字段:MasterID (PK)、CaseNumber、Status、[OtherFields....]
导航属性:DetailsTable、Clients

表:DetailsTable
字段:DetailsID (PK)、MasterID (FK)、InsuranceId (FK)、
DetailsS​​tatus 导航属性:MasterTable、Insurance

表:客户
字段:CustID (PK)、CustFName、CustFName、Address_id、Phone_id、MasterID (FK)
导航属性:订单、地址、电话

表:保险
字段:InsuranceId (PK)、InsuranceName、Address1、Address2、ZipCode、状态
导航属性:客户、详细信息表、地址

表:地址
字段:Address_id (PK)、Address1、Address2、ZipCode、State
导航属性:State

表:状态
字段:State_id (PK)、StateAbbrev
导航属性:国家

表:电话
字段:Phone_id (PK)、Home、Work、Mobile

我如何能够提取详细信息数据:
- MasterTable 中的 CaseNumber、Status
- InsuranceName、Address1、Address2、ZipCode、State 来自 Insurance 表(基于 DetailsTable 中的 InsuranceId
- DetailsTable 中的 DetailsS​​tatus - CustFName、CustFName ,Address1, Address2, ZipCode, 来自客户表的状态(*基于 Customers.MasterID = MasterTable.MasterID *)

谢谢。

4

1 回答 1

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));

它会简单地加载所有相关客户、详细信息和保险的主数据。之后,您可以在代码中进行投影或直接在视图中使用实体。

它会

于 2013-01-07T09:23:27.917 回答