0

由緒ある「グループ化」オプションは、複数のグループ化フィールドを適切に処理します。問題 : group by (grp) オブジェクトにないフィールドを結果セット (グループ化する必要がない) に含めたい場合はどうすればよいですか。そこにある無数の例に基づいて、状況を処理していないようです。

以下の例では、すべての group by フィールドが grp オブジェクトを使用して結果セットに適切に含まれています。では、「住所」に「番地」または「電話番号」があり、グループ化せずに単に結果に含めたいとしましょう。オプション?

var qry = from addr in addresses
          group addr by new { addr.city, addr.state, addr.country } into grp
          select new
          {
            city = grp.Key.city,
            state = grp.Key.state,
            country = grp.Key.country,
            count = grp.Count(),
          };
4

2 に答える 2

0

グループ化キーにない要素は、グループ自体から選択できます。

var qry = from addr in addresses
          group addr by new { addr.city, addr.state, addr.country } into grp
          select new
          {
            city = grp.Key.city,
            state = grp.Key.state,
            country = grp.Key.country,
            count = grp.Count(),
            phone = grp.Select(a => a.Phone).FirstOrDefault()
          };

使用するロジックと使用するクエリ プロバイダーに応じて、使用する "集計" (First、Last、Min、Max、FirstOrDefault など) を検討する必要があります。たとえば、EF は FirstOrDefault をサポートしていますが、First はサポートしていません。

于 2014-08-21T17:18:16.500 に答える
0

それらによってグループ化する必要はないかもしれませんが、グループ化と 1 対 1 の関係を持つものはすべて、とにかく事実上グループ化されています。したがって、電話でもグループ化するだけで、同じ結果が得られます。

var qry = from addr in addresses
      group addr by new { addr.city, addr.state, addr.country, addr.Phone } into grp
      select new
      {
        city = grp.Key.city,
        state = grp.Key.state,
        country = grp.Key.country,
        count = grp.Count(),
        phone = grp.Key.Phone
      };
于 2014-08-21T17:20:09.373 に答える