首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ:我如何缩短我的代码?

LINQ:我如何缩短我的代码?
EN

Stack Overflow用户
提问于 2012-08-09 20:32:06
回答 2查看 168关注 0票数 1

我已经做了一些LINQ,它工作得很好,但我不喜欢这种类型的编码,我想缩短它,但不太确定如何。

有人知道我如何缩短这段代码吗?我以前听说过谓词,但不太确定如何实现它们?

代码语言:javascript
运行
复制
 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();
EN

Stack Overflow用户

回答已采纳

发布于 2012-08-09 20:37:12

要删除重复的内容,请先设置列表。

代码语言:javascript
运行
复制
list = (from voucherslist in db.Vouchers
        //where voucherslist.Status != (int)VoucherStatus.Removed
        select voucherslist);

然后,如果需要的话,添加标题搜索:

代码语言:javascript
运行
复制
if (!String.IsNullOrEmpty(Search.SearchText))
{
    list = list.Where(x => x.Title.Contains(Search.SearchText));
} 

和状态搜索:

代码语言:javascript
运行
复制
if (Search.Status > 0)
{
    list = list.Where(x => x.Status == Search.Status);
}

最后,拿出你的100,并将其扁平化成一个列表。

代码语言:javascript
运行
复制
list = list.Take(100).ToList();

要记住的是,在.ToList()调用之前,这实际上不会构造和执行SQL查询,而要执行的SQL将包含您连接在一起的所有过滤。

票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11883533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档