我有 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();
我现在的问题是这个导航调用是否是好的做法?因为代码可读性有点差,如果表名很长的话就更差了。有一个更好的方法吗?我知道还有另一种连接变体,但我喜欢这个导航变体。
希望有人能帮助我:)
你可以添加一勺语法糖并使用
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();