0

この表を検討してください:

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

Id=8888は今、最初にレコードを選択しId=88882番目にそのレコードの前の年を選択したいと思います*(つまり、Id = 1)*。linq と 1 つのクエリでこれを行う方法。

基本的に、最初にテーブルから値を見つけ(PKではない可能性があります) 、別のテーブルで対応するレコードを見つけるクエリがいくつかあります。linq とデータベースへの 1 つの参照でこれを行う方法。

ありがとう

4

2 に答える 2

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 })
于 2012-06-27T09:06:03.267 に答える
1

あなたの質問が正しく理解できれば、1 つのテーブルのデータをフィルター処理して 2 つのテーブルを結合する必要があります。

テーブルを結合してデータをフィルタリングできます

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

または、1 つのテーブルからデータをフィルター処理して、テーブルを結合することもできます (結果は同じになります)。

var query = from c in Table1.Where(item => item.Col3 == "x")
            join o in Table2 on c.Col1 equals o.Col2
            select c;
于 2012-06-27T09:15:36.160 に答える