私はLINQクエリを使用してデータベースをクエリします(LINQ to SQLを使用しています)。クエリはスタンドアロンとしてうまく動作しますが、コンパイルされたクエリに挿入すると、呼び出し時にエラーが発生します。System.NotSupportedExceptionコンパイル済みLINQクエリ
エラー、スロー
例外: System.Data.Linq.dll追加情報の 'System.NotSupportedException':メンバー あるSQLへの変換は 'StaffManager.Employee.Key' はありません がサポートされています。
これは私が使用しているWORKSのクエリです。
public static ObservableCollection<Employee> EmployeesInSection(DatabaseDataContext database, string section)
{
return new ObservableCollection<Employee>(database.Staff_Time_TBLs
.Where(staff => staff.Section_Data == section)
.Select(staff => new Employee(staff.Staff_No ?? -1,
staff.Staff_Name_First, staff.Staff_Name_Second))
.ToList()
.GroupBy(staff => staff.Key)
.Select(staff => staff.First())
.OrderBy(staff => staff.Key)
.ToList());
}
これはKey
は問題を与えているようだEmployee class
です。
public class Employee
{
public int Key { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public string FullName => FirstName + " " + SecondName;
public Employee(int key, string first = null, string second = null)
{
Key = key;
FirstName = first;
SecondName = second;
}
}
そして、これがコンパイルされたクエリとクエリを呼び出す方法であり、
public static class CompiledQueries
{
public static Func<DatabaseDataContext, string, IEnumerable<Employee>>
sectionEmployess = CompiledQuery.Compile((DatabaseDataContext database, string section) =>
database.Staff_Data_TBLs.Where(staff => staff.Section_Data == section)
.Select(staff => new Employee(staff.Staff_No ?? -1,
staff.Staff_Name_First, staff.Staff_Name_Second))
.ToList()
.GroupBy(staff => staff.Key)
.Select(staff => staff.First())
.OrderBy(staff => staff.Key));
}
そしてこの方法は、エラーがここに発生します。
public static ObservableCollection<Employee> EmployeesInSection(DatabaseDataContext database, string section)
{
return new ObservableCollection<Employee>
(CompiledQueries.sectionEmployess(database, section));
}
私は、これがコンパイルされたクエリでは動作しません理由として損失でですが、単なるLINQクエリで正常に動作します。お時間をいただきありがとうございます。
クエリをリストに変換しました。これはもはやコンパイル可能なクエリではありません。 –
@JeffMercado、あなたはこの '.ToList()'について話していますか? – KyloRen
@JeffMercado、まったく同じランタイムエラーが発生しています。 – KyloRen