非常に単純な db ダイアグラムがあるとします。
そしてそれのためのビュー:
create view vTraining
as
select t.Id as TrainingId,t.[Status] ,
t.[User], t.Title,t.Organisation,t.[Month],t.[Year],
s.Id as SubjectId, s.Name as SubjectName,
c.Text as Comment
from Training t
join Subject s on s.Training = t.Id
join Comment c on c.Training = t.Id
サンプルデータを使用:
ご覧のとおり、これは 3 つの科目を含む 1 つのトレーニングです。この結果を linq to sql でこの構造にマップしたい:
public class ViewModel
{
public string Comment { set; get; }
public List<Item> Trainings { set; get; }
}
public class Item
{
public int TrainingId { set; get; }
public int User { set; get; }
public int Status { set; get; }
public string Title { set; get; }
public string Organisation { set; get; }
public int? Month { set; get; }
public int Year { set; get; }
public List<KeyValuePair<int, string>> Subjects { set; get; }
}
これは私が作成した私のクエリです:
var data = (from training in dc.vTrainings
group training by new
{
training.TrainingId,
training.Status,
training.Month,
training.Organisation,
training.Title
}
into g
select new ViewModel()
{
Comment = g.Select(x =>
x.Comment).First(),
Trainings = g.Select(
x => new Item()
{
Month = x.Month,
Organisation = x.Organisation,
Title = x.Title,
Year = x.Year,
Subjects = g.Select(
z => new KeyValuePair<int, string>(z.SubjectId, z.SubjectName)).ToList()
}).ToList()
})//.GroupBy(x => x.Trainings).Select(x => x.Key)
.ToList();
残念ながら、私が得た結果は私が望むものではありません:
ViewModel オブジェクトは、問題のないものだけが作成されますが、単一のサブジェクトごとに、新しいアイテムが作成されます (1 つにする必要があります)。サブジェクト リストが正しく作成されます。2 番目のグループを作成しようとしましたが、これが今のところ得られる最良の結果です。このクエリを記述して、3 つのサブジェクトを持つ 1 つの Item オブジェクトを持つ 1 つの ViewModel オブジェクトを取得する方法は?