本当にLinq to SQLのグループ化と集計にこだわって、どこでも検索しましたが、他のソリューションを自分のものに適用するのに十分理解できません。
データベースにview_ProjectTimeSummaryというビューがあります。これには次のフィールドがあります。
string_UserDescription
string_ProjectDescription
datetime_Date
double_Hours
開始日パラメーターと開始日パラメーターを受け入れ、最初にこのList <>を作成するメソッドがあります。
List<view_UserTimeSummary> view_UserTimeSummaryToReturn =
(from linqtable_UserTimeSummaryView
in datacontext_UserTimeSummary.GetTable<view_UserTimeSummary>()
where linqtable_UserTimeSummaryView.datetime_Week <= datetime_To
&& linqtable_UserTimeSummaryView.datetime_Week >= datetime_From
select linqtable_UserTimeSummaryView).ToList<view_UserTimeSummary>();
リスト(Datagridviewのデータソースとして使用される)を返す前に、同じ名前のパラメーターを使用してstring_UserDescriptionフィールドをフィルター処理します。
if (string_UserDescription != "")
{
view_UserTimeSummaryToReturn =
(from c in view_UserTimeSummaryToReturn
where c.string_UserDescription == string_UserDescription
select c).ToList<view_UserTimeSummary>();
}
return view_UserTimeSummaryToReturn;
結果のList <>を操作して、toおよびfrom日付パラメーター間で(および日付ごとに個別のエントリではなく)そのユーザーおよびプロジェクトのフィールドdouble_Hoursのsumを表示するにはどうすればよいですか?
例えば次のフィールドを持つList <>:
string_UserDescription
string_ProjectDescription
double_SumOfHoursBetweenToAndFromDate
これは、異なるタイプのList <>を返す必要があることを意味すると思います(view_UserTimeSummaryよりもフィールドが少ないため)。
私はそれを読んで合計を得るために「group/by/into b」のようなものですが、この構文が他のソリューションを見てどのように機能するか理解していません...誰かが私を助けてくれますか?
おかげでスティーブ
結果を保持するクラスを定義することから始めます。
public class GroupedRow
{
public string UserDescription {get;set;}
public string ProjectDescription {get;set;}
public double SumOfHoursBetweenToAndFromDate {get;set;}
}
フィルタリングを既に適用しているので、残すべきことはグループのみです。
List<GroupedRow> result =
(
from row in source
group row by new { row.UserDescription, row.ProjectDescription } into g
select new GroupedRow()
{
UserDescription = g.Key.UserDescription,
ProjectDescription = g.Key.ProjectDescription,
SumOfHoursBetweenToAndFromDate = g.Sum(x => x.Hours)
}
).ToList();
(または他の構文)
List<GroupedRow> result = source
.GroupBy(row => new {row.UserDescription, row.ProjectDescription })
.Select(g => new GroupedRow()
{
UserDescription = g.Key.UserDescription,
ProjectDescription = g.Key.ProjectDescription,
SumOfHoursBetweenToAndFromDate = g.Sum(x => x.Hours)
})
.ToList();