2016-10-31 24 views
0

私はcompanyContextというコンテキストを持っています。 3つのテーブルレポート、ログ、従業員があります。私はケースIDを与えられています。特定のケースに属しているすべての従業員のリストを取得する必要があります(ログがある場合はログがありますが、まだ)。だから私は、EmployeeIDがEmployee.IDと等しいところにあるすべての従業員を照会しました。そこでは、Reports CaseIDはcase.idになります。しかし、そのリストを表示していない、Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable}]クエリ結果を反復するエラー

私は正しくクエリを作っていますか?みんなありがとう。

var employees = await context.Reports.Include(s => s.Employee) 
.ThenInclude(e => e.ID) 
.AsNoTracking() 
.Where(r => r.CaseID == Case.Id); 

モデル

public class Log 
{ 
    public int ID { get; set; } 
    public string Input { get; set; } 
    public string Tag { get; set; } 
    public DateTime LogDate { get; set; } 
    public ICollection<Report> Reports { get; set; } 

} 
public class Employee 
{ 
    public int ID { get; set; } 
    public string Code { get; set; } 
    public string Name { get; set; } 
    public ICollection<Report> Reports { get; set; } 

} 
public class Report 
{ 
    public int ID { get; set; } 
    public string CaseID { get; set; } 
    public int EmployeeD { get; set; } 
    public int? LogID { get; set; } 
    public Employee Employee { get; set; } 
    public Log Log { get; set; } 
} 

答えて

0

、あなたは彼らと一緒に起動し、その後Employeeクラスの.Reportsナビゲーションプロパティを経由して狭いことができます。

1

SingleOrDefaultAsync

配列に複数の要素がある場合は、例外をスロー。

複数のレコードが必要な場合は、SingleOrDefaultAsyncを使用しないでください。

0

エンティティは実際には実際のデータベースを使用するようなものです。 whereとselect句を実行するだけでなく、toListを読み込み可能なものに変換する必要がありました。私が正しくあなたの質問を解釈だし、あなたが従業員に自分自身をしたい場合は

var employees = await context.Reports.Where(r => r.CaseID == Case.Id); 
.Select(r => r.Employee) 
.ToList(); 
+0

そうしないと、クエリが同期的に実行され、他のリクエストのスレッドがブロックされます。一般的に、LINQクエリを作成すると、結果を要求するまで(つまり 'SingleOrDefault()'、 'FirstOrDefault()'、 'ToList()'、foreach内の 'IQueryable 'ループ(注意、同期的に実行する – Tseng

関連する問題