簡體   English   中英

C#LINQ to SQL 2聯接

[英]C# LINQ to SQL 2 Joins

我正在嘗試使用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上進行內部聯接。

你有嘗試過嗎?

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

重新生成您的數據庫模型。

如果您的數據庫中有可為空的列,並且它們被映射為.net中的值類型( intdoubledecimal等),Linq to SQL會將它們生成為可為空的類型,因此您不必更改linq sql語句以將null納入考慮范圍,除非這實際上是查詢的一部分。

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM