Linq to SQL基于t1和t2标准返回t1对象

时间:2015-03-27 19:03:58

标签: c# linq entity-framework-6

我想返回所有t1对象及其相关信息,其中“DeleteFlag”== False,其关联的t2对象的“DeleteFlag”也是False,而t2的“SubmittedFlag”== true。

我想将这些组合成一个很好的Linq to SQL语句,而不是我现在要走很长的路......

var record = context.Records.Where(model => model.DeleteFlag == false).Include(model => model.Forms).toList();

    List<Records> returnModel = new List<Records>();

    foreach(var r in record)
    {
       foreach(var f in r.Forms)
       {
           if(f.SubmissionFlag == true && f.DeleteFlag == false)
           {
               returnModel.add(f);
           }
       }
    }

使用这个模型我可能在我的第一个数据库拉动中加载了很多额外的行而且我不仅需要遍历所有这些额外的记录而且还要关联相关的表单,直到找到我的主要标准。

在我看来,在下面的linq语句中似乎可行,但是我在错误后得到错误:

var records = context.Records.Where(model => model.DeleteFlag == false)
                             .Include(model => model.Forms
                             .Where(form => form.DeleteFlag == false && form.Submissionflag == true)).toList();

任何想法如何在我编写SQL存储过程并在一天之前调用它之前,在一个不错的Linq to SQL语句中清理所有这些递归工作?

2 个答案:

答案 0 :(得分:2)

喜欢这个。

var records = from record in context.Records
              where !record.DeleteFlag
              from form in record.Forms
              where !form.DeleteFlag && form.Submissionflag
              select form;

return new List<Record>(records);

答案 1 :(得分:1)

应该有效:

var returnModel = context.Records
                         .Where(model => !model.DeleteFlag)
                         .SelectMany(model => model.Forms)
                         .Where(form => !form.DeleteFlag && form.Submissionflag)
                         .ToList();