簡體   English   中英

LINQ內部連接條件

[英]LINQ inner join condition

假設我有下表:

**Members**
Code  Name
001   Sue
002   Peter
003   John

**Sales Info**
MemCode   Date        Type (A/B)  Values
001       17/12/2013  A           100
001       17/11/2013  B           100
002       16/12/2013  A           100

我想要以下結果表

**Member Sales in 2013**
MemCode  Jan(A) Jan(B) Feb(A) ... Nov(B) Dec(A) Dec(B)
001       0      0      0          100    100    0
002       0      0      0          0      100    0

我首先嘗試使用查詢來修正一些數據(Nov(A)和Nov(B)),

var query = from tb in Members
            join tb2 in SalesInfo on tb.MemCode equals tb2.MemCode
            join tb3 in SalesInfo on tb.MemCode equals tb3.MemCode
            where tb2.Type.Equals("A") &&
                  tb2.Date.Month.Equals(11)
                  tb3.Type.Equals("B") &&
                  tb3.Date.Month.Equals(11)
            Select ...

但是,由於沒有在11月找到A記錄,因此它不返回任何數據,因此將對整個行進行過濾。 有解決問題的建議嗎?

問題是您要輸入(Type == A && Type == B),這是不可能的。 您可以先選擇A,然后在子查詢中獲得相同日期的B值。

確實,如果要使用類型A和類型B,則應在類型== A或類型== B上進行選擇。沒有行會同時滿足這兩個條件:)

這樣的事情更簡單,也可能更有效

var query = from tb in Members
            join tb2 in SalesInfo on tb.MemCode equals tb2.MemCode
            where (tb2.Type.Equals("A") ||
                   tb2.Type.Equals("B")) &&
                   tb2.Date.Month.Equals(11)
            Select ...

暫無
暫無

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

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