使用 Linq 通过实体框架和导航进行数据库调用

问题描述 投票:0回答:1

我有 4 个数据库表,它们有一个具有 1:n 关系的外键。顺序如下

DbTable1 -> DbTable2 -> DbTable3 -> DbTable4

我使用实体框架,表格位于我的 edmx 中。因此我可以使用导航。

我获取数据的 linq 调用如下所示

     var dbContext = table1
                    .Where(w => w.table2.table3.table4.DbValue1 == value1 &&
                                w.table2.table3.table4.DbValue2 != value2 &&
                                w.table2.table3.table4.DbValue3 == value3 )
                    .Select(s => new
                    {
                        Result1 = s.Value1,
                        Result2 = s.Value2,
                        Result3 = s.table2.table3.Value1,
                        Result4 = s.table2.table3.table4.Value1
                    })
                    .ToList();

我现在的问题是这个导航调用是否是好的做法?因为代码可读性有点差,如果表名很长的话就更差了。有一个更好的方法吗?我知道还有另一种连接变体,但我喜欢这个导航变体。

希望有人能帮助我:)

c# entity-framework linq
1个回答
0
投票

你可以添加一勺语法糖并使用

let
子句:

var result = 
(
    from w in table1
    let tab4 = w.table2.table3.table4
    where tab4.DbValue1 == value1 &&
          tab4.DbValue2 != value2 &&
          tab4.DbValue3 == value3
    select new
    {
        Result1 = s.Value1,
        Result2 = s.Value2,
        Result3 = s.table2.table3.Value1,
        Result4 = tab4.Value1
    }
).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.