首页 文章

C#LINQ to SQL 2加入

提问于
浏览
0

我正在尝试使用LINQ to SQL将3个表连接在一起,但我遇到了一个问题 . 这是我的代码 .

(from table1 in dc.Table1
 join table2 in dc.Table2 on table1.Id equals table2.Id
 join table3 in dc.Table3 on table2.Id equals table3.Id into merged
 from rt in merged.DefaultIfEmpty()
 select new { table1.value1, table1.value2, table2.value1, table2.value2, rt.value1, rt.value2 }).ToList();

我得到的错误是

The null value cannot be assigned to a member with type System.Double which is a non-nullable value type.

我不确定我是否正确地做到了 . 基本上我想在Table1和Table2上进行内连接,然后在表3中使用左外连接 .

3 回答

  • 1

    你试过这个吗?

    (from table1 in dc.Table1
     join table2 in dc.Table2 on table1.Id equals table2.Id
     join table3 in dc.Table3 on table2.Id equals table3.Id into merged
     from rt in merged.DefaultIfEmpty()
     select new { table1.value1, table1.value2, table2.value1, table2.value2, rt.value1 == null ? 0 : rt.value1, rt.value2 == null ? 0 : rt.value2}).ToList();
    
  • -1

    重新生成数据库模型 .

    如果db中的列可以为空并且它们被映射到.net( intdoubledecimal 等)中的值类型,则Linq to SQL会将它们生成为可空类型,因此您不必更改linq使用sql语句将null考虑在内,除非它实际上是查询的一部分 .

  • 1

    试试这个:

    var result = dc.Table1
            .Join(dc.Table2, a => a.Id, b => b.Id, (a, b) => new { Id = a.Id, A = a.value1, B = a.value2, C = b.value1, D = b.value2})
            .Join(dc.Table3, a => a.Id, b => b.Id, (a, rt) => new { a.A, a.B, a.C, a.D, E = null != rt ? rt.value1 : null, F = null != rt ? rt.value2 : null})
            .ToList()
    

相关问题