0

MVC コントローラーで使用される次のクエリを検討してください。

return
    from student in Students
    where //..
    select student;

結果は次のように JSON に変換されます。

[
    {firstName: "John", lastName="Smith"},
    ...
]

次のようなコース数を含めるクエリが必要です。

[
    {firstName: "John", lastName="Smith", courseCount: "4"},
    ...
]

最初の解決策は、次のような匿名オブジェクトを使用してクエリを作成することです。

return
    from student in Students
    join course in Customers on course.StudentId equals student.Id 
    where //..
    group by //...
    select new {student.FirstName, student.LastName, CourseCount = courseGroup.Count()};

しかし、このようにして、私は学生の目的全体を失いました。たとえば、Age後で学生にプロパティを追加する場合、このクエリを更新student.Ageして選択部分に追加する必要があります。ただし、最初のソリューションでは、結果にこのフィールドが自動的に含まれます。

この選択を行うためのより堅牢なソリューションを探しているので、Studentクラスへのすべての変更が自動的に結果に反映されます。

回避策: これは解決策ですが、JSON 形式が変更されるため、ややこしいように思えます。より良い解決策を探しています。(おそらく動的オブジェクトで!)

select new { Student = student, CourseCount = courseGroup.Count()};

編集: 望ましい解決策は次のようなものです:

select new Student(student){CourseCount = courseGroup.Count()}

動的な方法で CourseCount を追加します。

4

1 に答える 1

-1

コースで左結合を実行すると、必要な結果が得られます。

[コード] return from student の Student が Customers の course に参加します.StudentId equals student.Id

courseGroup.DefaultIfEmpty() のコースから courseGroup に

where //..
select new {student.FirstName, student.LastName, CourseCount = courseGroup.Count()};

[コード]

GroupBy を実行すると、学生クラスがキャンセルされ、次のようなことを行う必要があります... courseGroup.StudentFirstName ... GroupBy がどのように見えるかによって異なります。

于 2013-07-08T00:25:06.513 に答える