2009-07-20 13 views
1

私はLINQクエリが参加し、グループ

var auta = from a in MtAuta.FindAll() 
        join p in DtPoruchy.FindAll() on a equals p.MtAuta into ap 
        from ap2 in ap.DefaultIfEmpty() 
        where ap2.SERVIS >= 3 
        group ap2 by ap2.ID into grouped 
        select new { 
を、私はこのような何かをしようと試みたが、私はselect文を扱う傾ける

select sum(cena), id_auta, max(servis) from dt_poruchy left outer join mt_auta on dt_poruchy.id_auta=mt_auta.id
where dt_poruchy.servis>=3 group by id_auta;

作業LINQ文のには、このSQLクエリを変換することができませんよ

私は何か助けに感謝します!

答えて

1

(仮に「シナ」はMtAuta.FindAll()に所属):私はあなたのソリューションを少し変更したと私はそれは次のように働いてしまった

 var auta = from e in 
         (from a in DtPoruchy.FindAll() 
         where a.SERVIS >= 3 
         join p in MtAuta.FindAll() on a.MtAuta equals p.Id into ap 
         from ap2 in ap.DefaultIfEmpty() 
         select new 
         { 
          Cena = ap.cena, 
          IdAuta = a.MtAuta, 
          Servis = a.servis 
         }) 
        group e by e.IdAuta into g 
        select new 
        { 
         Cena = g.Sum(e => e.cena), 
         IdAuta = g.Key, 
         Servis = g.Max(e => e.servis) 
        }; 
1

どのテーブルcenaとservisが来ているのか分かりませんが、グループ化された合計を作成するには、何かのようにしてください。

select new { Sum = grouped.Sum(x => x.cena) } 

ここで最大

select new { Max = grouped.Group.Max(x => x.servis) } 

を得るためにあなたのために良いの参照です。提供限られた情報に基づいて

2

(テーブルから特定のフィールドがありますか?)、ここで私が思い付いたものです。私は、このソリューションに達した

var auta = from a in MtAuta.FindAll() 
      let p = a.DtPoruchys.Where(s => s.SERVIS >= 3) 
      select new 
      { 
       Id = a.Id, 
       CenaSum = p.Sum(c => c.Cena), 
       Servis = p.Max(s => s.SERVIS) 
      }; 
+0

私が間違った前提をしているかどうか教えてください。私は自分の答えを更新するようにします! –

+0

私のインクループ定義については申し訳ありません。 MtAutaはマスタテーブル(DtPoruchyを含む)で、DtPoruchyはCENA、SERVIS、およびID_AUTAフィールドを含むスレーブテーブルです。 – user137348

+0

私の答えの大文字のほかに、これはあなたのために働くのですか? LinqToSqlを使用していますか?もしそうなら、関係が適切に設定されていますか?あなたの質問に 'p.MtAuta'があるように、それは現れましたが、確認するのが良いかもしれません。 –

0

var auta = from jo in 
         (
          from a in MtAuta.FindAll() 
          join p in DtPoruchy.FindAll() on a equals p.MtAuta into ap 
          from ap2 in ap.DefaultIfEmpty() 
          where ap2.SERVIS >= 3 
          select new 
          { 
           Cena = ap2.CENA, 
           Idauto = ap2.ID_AUTA, 
           Servis = ap2.SERVIS 
          } 
         ) 
        group jo by jo.Idauto into g 
        select new 
        { 
         Cena = g.Sum(jo => jo.Cena), 
         IdAuto = g.Key, 
         Servis = g.Max(jo => jo.Servis) 
        }; 

これが最適なソリューションであるかどうか不思議です。

+0

これは遠隔操作が必要なことはまずありません。ライアンの答えを出してください。 –

関連する問題