1
var depts = ctx.Departments
            .OrderBy(d => d.deptName)
            .Select(d => d.deptNo);

foreach (int deptNumber in depts) {
    var deptReports = from d in ctx.Departments
                      join r in matchingIncidents on d.deptNo equals r.deptNo
                      where r.deptNo == deptNumber
                      select r;

    int deptReportsCount = deptReports.Count();

私は完全に困惑しています!このエラーに関するすべての質問は、私が行っているプリミティブフィールド(IDなど)で==を使用することを示しています。このクエリに対して私が行うことはすべて例外を生成します。以前はまったく同じコードが機能していましたが、何をしたのかわかりません。誰かが私に何が起こっているのか説明してもらえますか?

また、クエリ内のオブジェクト(日付など)を変換できるメソッドを備えたEntityFrameworkクラスがあったことを覚えていますが、このクラスが何であるかを知っている人はいますか?

アップデート:

これが私が行った変更です(現在は機能しています)。

var deptReports = from r in matchingIncidents
                  join d in ctx.Departments on r.deptNo equals d.deptNo
                  where r.deptNo == deptNumber
                  select r;
4

2 に答える 2

2

matchingIncidents複合型のローカルコレクションのように見えます(を使用しているためr.deptNo)。これは、LINQtoEntitiesでは許可されていません。代わりにこれを試すことができます:

foreach (int deptNumber in depts) {
    var deptReports = from d in ctx.Departments
                      join r in matchingIncidents.Select(m => m.deptNo)
                          on d.deptNo equals r
                      where r == deptNumber
                      select r;

int deptReportsCount = deptReports.Count();

matchingIncidents.Select(m => m.deptNo)はプリミティブ型のローカルコレクションになりdeptReports、のシーケンスになります(それが型であるとint仮定します)。しかし、結果の要素を数えるためには、それでも問題ないはずです。deptNoint

編集

EntityFunctionsそして、おそらく静的クラスを検索しています。

http://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions.aspx

于 2011-06-01T16:40:08.163 に答える
0

問題は次のようになります:

join r in matchingIncidents on d.deptNo == r.deptNo
于 2011-06-01T16:23:09.940 に答える