0

選択した Age フィルターに一致する Age のビューを返そうとしています。LINQ は .ToString() や int.Parse などの実際の C# 操作を実行できないため、ラムダ式自体の外で実行する必要があると読みました。

私はそれを試しましたが、具体的にはまだ NotSupportedException を取得しています

LINQ to Entities はメソッド 'Int32 CalculateAgeList(System.DateTime)' メソッドを認識せず、このメソッドはストア式に変換できません。

何が起こっているのかを把握するためにデバッグを試みましたが、問題のコンテキストを完全に見つけることができないようです。

私のリターンステートメントは

else
{
    int tempvalue = int.Parse(ageValue);
    return View(actors.Where((bd => CalculateAge(bd.BirthDate) == tempvalue)));
}

はマッピングされていないためActors.Age、生年月日から年齢を計算する必要があります。これは次のようになりCalculateAgeます。

private int CalculateAge(DateTime birthday)
{
    return ((int)(DateTime.Now - birthday).TotalDays / 365);
}

そのため、式からすべての変換を削除したため、これが機能するはずであると想定しましたが、まだ適合がスローされています。

また、これは、以下に示すように、最初にフィルター処理する Age のリストを生成するとき (フィルター処理のために存在する Age のドロップダウン ボックスにデータを入力する) と同様のプロセスが機能するため、これが「機能するはず」であると考えています。

var AgeList = new List<string>();
var AgeListQry = (from d in db.Actors orderby d.BirthDate select d.BirthDate)
    .ToList();
AgeList.AddRange(AgeListQry.Select(bd => CalculateAgeString(CalculateAge(bd)))
    .Distinct());
ViewBag.ageValue = new SelectList(AgeList);

全体像の場合、式で .ToString() を使用できないため、そのメソッドの文字列にも変換されます。

private string CalculateAgeString(int age)
{
    return age.ToString();
}

では、年齢のリストの生成には機能するのに、実際のフィルタリング プロセスには機能しないのはなぜでしょうか? 私の表現でのWhere対の使用と関係がありますか?Select

4

1 に答える 1