次のような Employee クラスがあります。
public class Employee
{
public Int32 employeeId;
public String employeeFName;
public String employeeSName;
public Gender empGender;
public string empContactNo;
public DateTime empDOB;
public string empAddress;
public Int16 accessLevel;
private string pass;
public String Pass
{
get { return this.pass; }
set { this.pass = value; }
}
public static Gender ConvertToGender(string gen)
{
if (gen == "Male")
return Gender.Male;
else
return Gender.Female;
}
}
「性別」は列挙型です。
public enum Gender { Male, Female }
次の LINQ クエリを使用しています。
var query = from emp in hmsdatabase.TblEmployees
where emp.EmpId == employeeid
select new Employee()
{
employeeId = emp.EmpId,
employeeFName = emp.EmpFirstName,
employeeSName = emp.EmpSurName,
empGender = Employee.ConvertToGender(emp.EmpGender),
empContactNo = emp.EmpContactNo,
empDOB = DateTime.Parse(emp.EmpDOB.ToString()),
empAddress = emp.EmpAddress,
accessLevel = Int16.Parse(emp.EmpAccessRight.ToString())
};
コンパイル中にエラーは発生しませんが、実行時に次のエラーが発生します。
System.NotSupportedException: LINQ to Entities はメソッド 'HMSTest.Gender ConvertToGender(System.String)' メソッドを認識せず、このメソッドはストア式に変換できません。
このエラーについて調査しましたが、LINQ はユーザー定義関数 'Employee.ConvertToGender(string)' を同等の SQL クエリに変換できないため、機能しないことがわかっています。これも理にかなっています。では、簡単な回避策はありますか?? この種の機能 (変換関数を使用する) はアプリケーションで非常に一般的であるため、Microsoft の担当者はこれについて考えたに違いありません。ここで完全に欠けている何かについて知りたいです。