5

従業員テーブルとEmployeeCourseStatusテーブルがあります。

完了したコースの数を含む各従業員のリストを表示したい(status = "CMP")。

以下の相関サブクエリがあり、以下のエラーが発生します。

var query = (from emp in Employee
                     join adr in EmployeeAddress on emp.id = adr.EmployeeID
                     select new
                     {
                        id = emp.id,
                        name=emp.name,
                        country=adr.country,
                        CompletedCourseCount = (from c in employeeCourseStatus where c.empid = emp.id && c.status == "CMP" select c.id).count()
                     }

エラー:

Premitiveタイプのみがサポートされています。

同等のSQLサブクエリは-

Select emp.id
       , emp.name
       , adr.Country
       , CompletedCourseCount = (select count(id) from EmployeeCourseStatus where id = emp.id and status = "CMP") 
from   Employee emp
       JOIN employeeaddress adr ON adr.EmployeeID = emp.ID
4

3 に答える 3

3

equalsシーケンスを結合するときにキーワードを使用する

var query = from emp in Employee
            join adr in EmployeeAddress on emp.id equals adr.EmployeeID
            join c in EmployeeCourseStatus on emp.id equals c.empid into courses
            select new
            {
               id = emp.id,
               name = emp.name,
               country = adr.country,
               CompletedCourseCount = courses.Where(x => x.status == "CMP").Count()
            };
于 2012-11-16T23:59:41.727 に答える
1

私はラムダ式を使用することを好みます(読みやすさのために-特に Join メソッドで):

Employee.Join(EmployeeAddress, emp => emp.id, adr => adr.EmployeeID, (emp, adr) => new
{
    id = emp.id,
    name = emp.name,
    country = adr.country,
    CompletedCourseCount = employeeCourseStatus.Count(c => c.empid == emp.id && c.status == "CMP")
});
于 2012-11-17T00:02:50.967 に答える
0

カウント クエリを に置き換えwhere c.empid = emp.idてみてください。where c.empid == emp.id

それがうまくいかない場合、emp.nameとの型は何adr.countryですか?

于 2012-11-16T23:59:24.717 に答える