2012-02-24 8 views
1

IDとタイムスタンプを持つ1つのテーブル 'a'があります。もう1つのテーブル 'b'には、idを参照するN個の複数の行があり、各行には「型」と「その他のデータ」があります。 複数の行を1つの行に結合するLINQクエリを作成するにはどうすればよいですか?

は私はこのような「他のいくつかのデータ」X NをLINQクエリは、ID、タイムスタンプと 単一の行を生成する、と:46.5が「B」の一列からのものである


    1 | 4671 | 46.5 | 56.5 

56.5は別の行からのものです。どちらも同じIDで

私はSQLiteで動作するクエリを持っていますが、私はLINQを初めて使用しています。私はどこから始めるべきかわかりません - 私はこれがまったくジョインだとは思わない。あなたが何をしたいか


    SELECT 
     a.id as id, 
     a.seconds, 
     COALESCE(
     (SELECT b.some_data FROM 
      b WHERE 
      b.id=a.id AND b.type=1), '') AS 'data_one', 
     COALESCE(
     (SELECT b.some_data FROM 
      b WHERE 
      b.id=a.id AND b.type=2), '') AS 'data_two' 

     FROM a first 
     WHERE first.id=1 
     GROUP BY first.ID 

答えて

2

エンティティに対してLinqからLinqを使用しているかどうかは言及していません。しかし、次のクエリが

(from x in a 
join y in b on x.id equals y.id 
select new{x.id, x.seconds, y.some_data, y.type}).GroupBy(x=>new{x.id,x.seconds}). 
Select(x=>new{ 
    id = x.key.id, 
    seconds = x.Key.seconds, 
    data_one = x.Where(z=>z.type == 1).Select(g=>g.some_data).FirstOrDefault(), 
    data_two = x.Where(z=>z.type == 2).Select(g=>g.some_data).FirstOrDefault() 
}); 

をUを取得する必要があります明らかに、あなたは、基になるプロバイダーによってのDataContextまたはObjectContextを使用してテーブル名の前に付ける必要があります。

+0

この回答は私をもっと助けましたが、どちらも便利でした。しかし、私が書いたLINQクエリはSQLite atmで動作していません。それがLINQクエリかDBLinqドライバのどちらであるかわかりません。 – ahnkle

0

がピボットに似ている、Is it possible to Pivot data using LINQ?を参照してください。違いは、(標準的なピボットのように)集約する必要はないので、Maxや、単一のvarcharフィールドの選択をシミュレートできる類似のメソッドを使用する必要があるという点です。