[英]How to apply if condition in LINQ?
下面是我的LINQ
我想重写我的LINQ
,好像flag
为true
然后获取所有记录,否则应用.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.