2012-06-27 50 views
0

請考慮此表:如何從2個表中一個LINQ查詢返回的值

PK_Id   Number   Year   Month    Value 
------------------------------------------------------------------------- 
1    1    2000    5     100000 
410   4    2000    6     10000 
8888   1    2001    5     100 

Id=8888,現在我想第一選擇記錄與Id=8888第二選擇記錄previos年*(我的意思是Id = 1)*。我怎麼可以用linq和一個查詢來做到這一點。

基本上我們有一些疑問,首先它應該從表中找到一個值(可能不是PK),並找到對應的記錄在另一個表中。我如何用linq和一個數據庫引用來做到這一點。

感謝

+0

選擇兩次,是不是很好? –

+0

這個select查詢的標準是什麼,你傳入一個PK_Id來查找第一行,然後第二行如何鏈接? Year2 = Year1 - 1?幾個月左右,號碼進來了嗎? –

回答

1
from a in Record 
where a.PK_Id == 8888 
from b in Record 
where b.Number == a.Number && b.Year == a.Year - 1 
select new { Current = a, Previous = b } 

Record 
.Where(a => a.PK_Id == 888) 
.SelectMany(a => 
    Record 
    .Where(b => b.Number == a.Number && b.Year == a.Year - 1) 
    .Select(b => new { Current = a, Previous = b }) 
1

如果我明白你的問題吧,然後你需要過濾一個表中的數據和連接兩個表。

你可以加入的表和篩選數據

var query = from c in Table1 
      join o in Table2 on c.Col1 equals o.Col2 
      where o.Col3 == "x" 
      select c; 

,或者你可以從一個表中篩選數據,然後連接表(結果是一樣的)

var query = from c in Table1.Where(item => item.Col3 == "x") 
      join o in Table2 on c.Col1 equals o.Col2 
      select c;