EF6获取记录,其中来自两个不同表的信息等于x

时间:2015-09-14 23:34:53

标签: c# sql sql-server linq-to-sql entity-framework-6

我猜这是一个加入问题 - 无论如何我都不明白。 但如果Where子句是正确的,并且另一个表上的Where子句不正确,我必须从EUReporteds获取一条记录。

我正在使用的编码真的很可怕

do
  {
  // Get the next Unprocessed.
  if (skip == 0)
     eur = de.EUReporteds.Where(r => r.Processed == false && r.ReportProcessingCount < 11).FirstOrDefault();
  else
     eur = de.EUReporteds.Where(r => r.Processed == false && r.ReportProcessingCount < 11).OrderBy(ob => ob.id).Skip(skip).FirstOrDefault();
     // Have we personally already done this?
     pr = de.ProcessingResults.Where(p => p.UserId == CurrentUser.UserId && p.id == eur.id).FirstOrDefault();         
     skip++;
} while (pr != null || eur == null); // If so repeat

所以我在这里要做的是:

  1. 从EUReporteds获取记录 记录尚未处理的位置 并且RecordProcessingCount小于11
  2. 检查此登录用户是否已经处理过该记录 获取ProcessingResults记录CurrentUser所在的位置 并且EUReporteds的ID也存在
  3. IF ProcessingResults Record Exists然后我们已完成此记录,找到下一个记录,直到找不到ProcessingResults记录。
  4. 有人可以告诉我如何正确地写这个。

1 个答案:

答案 0 :(得分:1)

试试这个(使用linq):

var firstUnprocessedRecord = (from eur in de.EUReporteds 
                             where !eur.Processed && eur.ReportProcessingCount < 11 
                             && !(de.ProcessingResults.Any(o=>o.UserId == CurrentUser.UserId && o.id == eur.id))
                             orderby eur.id
                             select eur).FirstOrDefault();