繁体   English   中英

LINQ条件如何申请?

[英]How to apply if condition in LINQ?

下面是我的LINQ

我想重写我的LINQ ,好像flagtrue然后获取所有记录,否则应用.skip()take()如此处所述

    public IEnumerable<ReportMapper> FetchReports(DateTime startDate, DateTime endDate, int docMode, int pageNumber, bool flag )
    {
        try
        {
            IEnumerable<ReportMapper> reports;
            using (var entities = new DatabaseEntities1())
            {
                IQueryable<ReportMapper> query;
                if (docMode > 0)
                {
                    query = (from c in entities.tDocumentStatus
                             join d in entities.tTOCStructures on c.DocumentId equals d.DocumentID
                             join e in entities.tUsers on d.LastUpdatedBy equals e.UserUID
                             orderby c.AssignedDate descending
                             where c.AssignedDate >= startDate && c.AssignedDate <= endDate && c.StatusId == docMode
                             select new ReportMapper()
                             {
                                 DocumentName = d.FolderName,
                                 AssignedDate = c.AssignedDate,
                                 ReviewStatus = c.tStatu.StatusName,
                                 ActionPerformedBy = e.FirstName + " " + e.LastName
                             }).Skip(pageNumber * 10).Take(50);
                }
                else
                {
                    query = (from c in entities.tDocumentStatus
                             join d in entities.tTOCStructures on c.DocumentId equals d.DocumentID
                             join e in entities.tUsers on d.LastUpdatedBy equals e.UserUID
                             orderby c.AssignedDate descending
                             where c.AssignedDate >= startDate && c.AssignedDate <= endDate
                             select new ReportMapper()
                             {
                                 DocumentName = d.FolderName,
                                 AssignedDate = c.AssignedDate,
                                 ReviewStatus = c.tStatu.StatusName,
                                 ActionPerformedBy = e.FirstName + " " + e.LastName
                             }).Skip(pageNumber * 10).Take(50);
                }


                reports = query.ToList<ReportMapper>();

                return reports;
            }
        }
        catch (Exception ex)
        {
            //handle exception
        }
    }

但不知道我将如何做到这一点。

注意 : - 请注意,上述查询中的var docMode用于检查是否在where子句中应用第三个条件(检查我的where子句是否全部不同)

如果不使用if-else阶梯,有没有更好的方法。

您可以将查询简化为:

public IEnumerable<ReportMapper> FetchReports(DateTime startDate, DateTime endDate, int docMode, int pageNumber, bool flag)
{
    using (var entities = new DatabaseEntities1())
    {
        IQueryable<ReportMapper> reports = 
                  from c in entities.tDocumentStatus
                  join d in entities.tTOCStructures on c.DocumentId equals d.DocumentID
                  join e in entities.tUsers on d.LastUpdatedBy equals e.UserUID
                  orderby c.AssignedDate descending
                  where c.AssignedDate >= startDate && c.AssignedDate <= endDate
                    && (docMode <= 0 || c.StatusId == docMode)
                  select new ReportMapper()
                  {
                      DocumentName = d.FolderName,
                      AssignedDate = c.AssignedDate,
                      ReviewStatus = c.tStatu.StatusName,
                      ActionPerformedBy = e.FirstName + " " + e.LastName
                  };

        if(!flag)
            reports = reports.Skip(pageNumber * 10).Take(50);

        return reports.ToList();
    }
}

我这样做:

    public IEnumerable<ReportMapper> FetchReports(DateTime startDate, DateTime endDate, int docMode, int pageNumber, bool flag) {
        try {
            IEnumerable<ReportMapper> reports;
            using (var entities = new DatabaseEntities1()) {
                var query = (from c in entities.tDocumentStatus
                    join d in entities.tTOCStructures on c.DocumentId equals d.DocumentID
                    join e in entities.tUsers on d.LastUpdatedBy equals e.UserUID
                    orderby c.AssignedDate descending
                    where c.AssignedDate >= startDate && c.AssignedDate <= endDate && (docMode <= 0 || c.StatusId == docMode)
                    select new ReportMapper() {
                        DocumentName = d.FolderName,
                        AssignedDate = c.AssignedDate,
                        ReviewStatus = c.tStatu.StatusName,
                        ActionPerformedBy = e.FirstName + " " + e.LastName
                    });
                if (!flag)
                    query = query.Skip(pageNumber*10).Take(50);
                reports = query.ToList<ReportMapper>();

                return reports;
            }
        }
        catch (Exception ex) {
            //handle exception
        }
    }

在查询后添加:

if (!flag) query = query.Skip(pageNumber * 10).Take(50);
                query = (from c in entities.tDocumentStatus
                         join d in entities.tTOCStructures on c.DocumentId equals d.DocumentID
                         join e in entities.tUsers on d.LastUpdatedBy equals e.UserUID
                         orderby c.AssignedDate descending
                         where c.AssignedDate >= startDate && c.AssignedDate <= endDate && c.StatusId == docMode
                         select new ReportMapper()
                         {
                             DocumentName = d.FolderName,
                             AssignedDate = c.AssignedDate,
                             ReviewStatus = c.tStatu.StatusName,
                             ActionPerformedBy = e.FirstName + " " + e.LastName
                         });
if(!flag){
   query = query.Skip(pageNumber * 10).Take(50);
}
query = (from c in entities.tDocumentStatus
                         join d in entities.tTOCStructures on c.DocumentId equals d.DocumentID
                         join e in entities.tUsers on d.LastUpdatedBy equals e.UserUID
                         orderby c.AssignedDate descending
                         where c.AssignedDate >= startDate && c.AssignedDate <= endDate && (docMode <=0 || c.StatusId == docMode)
                         select new ReportMapper()
                         {
                             DocumentName = d.FolderName,
                             AssignedDate = c.AssignedDate,
                             ReviewStatus = c.tStatu.StatusName,
                             ActionPerformedBy = e.FirstName + " " + e.LastName
                         });

if(!flag){
   query = query.Skip(pageNumber * 10).Take(50);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM