我已经做了一些LINQ,它工作得很好,但我不喜欢这种类型的编码,我想缩短它,但不太确定如何。
有人知道我如何缩短这段代码吗?我以前听说过谓词,但不太确定如何实现它们?
List<Voucher> list = new List<Voucher>();
if (String.IsNullOrEmpty(Search.SearchText) && Search.Status == 0)
{
list = (from voucherslist in db.Vouchers
//where voucherslist.Status != (int)VoucherStatus.Removed
select voucherslist)
.Take(100)
.ToList();
}
if (!String.IsNullOrEmpty(Search.SearchText) && Search.Status ==0)
{
list = (from voucherslist in db.Vouchers
where voucherslist.Title.Contains(Search.SearchText)
select voucherslist).Take(100).ToList();
}
if (String.IsNullOrEmpty(Search.SearchText) && Search.Status > 0)
{
list = (from voucherslist in db.Vouchers
where voucherslist.Status == Search.Status
select voucherslist).Take(100).ToList();
}
if (!String.IsNullOrEmpty(Search.SearchText) && Search.Status > 0)
{
list = (from voucherslist in db.Vouchers
where voucherslist.Status == Search.Status
&& voucherslist.Title.Contains(Search.SearchText)
select voucherslist).Take(100).ToList();
}
// Convert
ret = VouchersConverter.Convert(list);
// Get Business Details
foreach (ENT_Voucher item in ret)
item.BusinessDetails = this._businessesBLL.GetBusinessDataByID(item.BusinessID);
// Refine and sort
ret = ret.Where(x=>x.BusinessDetails.Accept == true)
.OrderByDescending(x => x.Status.Equals(1))
.ThenByDescending(x => x.StartDate).ToList();发布于 2012-08-09 20:37:12
要删除重复的内容,请先设置列表。
list = (from voucherslist in db.Vouchers
//where voucherslist.Status != (int)VoucherStatus.Removed
select voucherslist);然后,如果需要的话,添加标题搜索:
if (!String.IsNullOrEmpty(Search.SearchText))
{
list = list.Where(x => x.Title.Contains(Search.SearchText));
} 和状态搜索:
if (Search.Status > 0)
{
list = list.Where(x => x.Status == Search.Status);
}最后,拿出你的100,并将其扁平化成一个列表。
list = list.Take(100).ToList();要记住的是,在.ToList()调用之前,这实际上不会构造和执行SQL查询,而要执行的SQL将包含您连接在一起的所有过滤。
https://stackoverflow.com/questions/11883533
复制相似问题