0

私のコード:

var lastName = employees
   .Where(a => a.Number ==
      (dm.MTM.Where(b => b.MTT.IsManager)
             .Select(c => c.Number)
             .FirstOrDefault()))
   .Select(z => z.LastName)
   .FirstOrDefault();

エラーメッセージ:

Unable to create a constant value of type 'XXX.Models.Mt.MTM'. Only primitive types or enumeration types are supported in this context. 
4

2 に答える 2

1

試す:

int? num = dm.MTM.Where(b => b.MTT.IsManager).Select(c => c.Number).FirstOrDefault();
var lastName = employees.Where(a => a.Number == num).Select(z => z.LastName).FirstOrDefault();

ただし、チェックを追加する必要があります

if (num == null)
{
    // bad things, don't execute second query
}

2 つの命令の間。

エラーは、Entity Framework クエリでは、計算に必要なもののように、あまり手の込んだ「こと」を行うことができないためですnum

于 2013-08-16T10:29:50.777 に答える
0

試す:

// Calculate the number outside of the main query
// because the result is fixed
var nb = dm.MTM
      .Where(b => b.MTT.IsManager)
      .Select(c => c.Number)
      .FirstOrDefault();

// Perform the main query with the number parameter already calculated before
string lastName = String.Empty;
if (nb != null) // if null no need to run the query
{  
   lastName = employees
      .Where(a => a.Number == nb)
      .Select(z => z.LastName)
      .FirstOrDefault();
}

各従業員のデータベースから数値を取得する必要はありません。メイン クエリを実行する前に値を計算してください。これにより、高速になり、エラーが発生しにくくなり、キャッシュに適しています。

于 2013-08-16T10:35:32.277 に答える