選択した 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