私は、次のLINQのコードを持っていた:私はその後、それぞれの新しいTOARequestListSummaryオブジェクトを構築unsatifiedRequests上foreach
をしたLinqの選択クエリでカウントとグループを使用するにはどうすればよいですか?
var allRequests = model.GetAllRequests();
var unsatisifedRequests = (from request in allRequests
where request.Satisfied == false
select request)
.OrderBy(r => r.RequestedOn)
.GroupBy(r => r.RequestedCountryId);
た後。これは、クエリから4つの項目を返すと、個々の行を取得するためにforeachのループごとに1回、DBへの4回の呼び出しを行います。
これは、LINQのを使用するために間違った方法であると思われるので、私はTOARequestListSummaryオブジェクトを直接返すために突起部を使用したものに、このクエリを変換しようと私が思い付いた:
var summaries = (from request in allRequests
where request.Satisfied == false
group request by request.RequestedCountryId into requestGroups
select new TOARequestListSummary
{
CountryName = requestGroups.First().RequestedCountry.Description,
RequestCount = requestGroups.Count(),
FirstRequested = requestGroups.First().RequestedOn
});
しかし、私は実行するとこれは、私は次の例外を取得:
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
私は限りLINQの当量はEXISTSすることを知ることが含まれているが、私は、クエリにこれをindroduceする方法が分からないとして持っています。
実際、これはあまり正しくありません。私の例では、 'RequestedOn'は' RequestedCountry'オブジェクト上にあると仮定されていますが、あなたは 'request'自体にそれを持っています。 'FirstRequested'を特定する方法がありますか?もしそうでなければ、上記のように 'requestGroups.First()。RequestedOn'を使うことができます。あなたが最小または最大(または他の方法)をしたい場合、私はそれを修正するために変更することができます。 –
RequestedOnはDateTime列です。最初に要求されたものがリストの一番上に表示されるように、それらを注文しようとしていました。 私はあなたの答えでコードを試してみましたが、gはCountry obejcts(RequestedCountryの型)のコレクションであるので、.Requested onはコンパイルされません。 私はg.First()を試してみましたが、次のような苦情がありました: メンバ 'Logica.Aurora.Data.Entities.TOARequest.RequestedCountry'にはSQLへの変換がサポートされていません。 これはグループ化できないことを意味しますか? –
'RequestedCountry'はあなたのDB関係から自動的に生成されたプロパティですか? 'FirstRequested'はそのグループの最も古い' request'でしょうか、それとも最も古い 'request'の日付であるべきですか? –