使用LINQ创建具有1:N关系的实体的查询

时间:2013-05-10 05:35:28

标签: c# asp.net-mvc-3 linq-to-entities

我知道做出这样的询问并不是什么不寻常的事,但我想我迷路了,所以我寻求帮助。我必须使用关系1:N的表格,并使其更清晰我将从管理工作室发布一个打印屏幕:

Table relation

我正在开发一个asp.net mvc 3项目,我需要查看所有Documents将被显示的视图(以及一些过滤器和内容,但我认为这与此案例无关)。我需要表Documents中的数据,而DocumentFields表中每个文档只需要一个特定记录。此记录是包含Document名称的记录,它的唯一性是DocumentID == Docmuents.Id,DocumentFields.RowNo == 1和DocumentsFields.ColumnNo == 2.这是每个Document的唯一记录,我需要获取{来自此记录的{1}}实际上包含文档的名称。

我不太确定如何构建我的查询(可能使用JOIN),我也想让我的视图强类型传递类型FieldValue的模型,但我不确定它是否可行,但是我认为,根据构建查询的方式,将确定视图模型的类型。

1 个答案:

答案 0 :(得分:3)

我相信你想要的是这样的:

var results = 
    from d in dbContext.Documents
    join df in dbContext.DocumentFields 
    on new { d.Id, RowNo = 1, ColumnNo = 2 } equals 
       new { Id = df.DocumentId, df.RowNo, df.ColumnNo }
    select new 
    {
        Document = d,
        DocumentName = df.FieldValue
    };

当然,如果你设置导航属性,你可以这样做:

var results = 
    from d in dbContext.Documents
    let df = d.DocumentFields.First(x => x.RowNo == 1 && x.ColumnNo == 2)
    select new 
    {
        Document = d,
        DocumentName = df.FieldValue
    };