c# - Linq代码重构

标签 c# .net linq

请帮助我使用 Linq 重构这段代码。如何只使用一次 Where 和 ToList? 感谢帮助

private IEnumerable<SomeClass> Filter(IEnumerable<SomeClass> aaa, string name, string company, string address,int? age)       
{
    var ans = new List<SomeClass>();         
    if (!String.IsNullOrEmpty(name))
        ans = aaa.Where(x => x.name.equal(name)).ToList();

    if (!String.IsNullOrEmpty(company))
        ans = ans.Where(x => x.company.equal(company)).ToList();

    if (!String.IsNullOrEmpty(address))
        ans = ans.Where(x => x.address.equal(address)).ToList();

    if (age.HasValue)
        ans = ans.Where(x => x.age == age.Value).ToList();

    return ans;
}

最佳答案

你可以使用这个:

var ans = aaa.Where( x => ( string.IsNullOrEmpty(name)
                            || x.name.equal(name)
                          )
                          &&
                          ( string.IsNullOrEmpty(company)
                            || x.company.equal(company)
                          )
                          &&
                          ( string.IsNullOrEmpty(address)
                            || x.address.equal(address)
                          )
                          &&
                          ( !age.HasValue
                            || x.age == age.Value
                          )
                   );

关于c# - Linq代码重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20967095/

相关文章:

c# - 如何在没有IDL或后期绑定(bind)调用远程方法的情况下访问CORBA接口(interface)

c# - C# 中的 PropagationFlags 枚举 [访问控制条目 (ACE)]

c# - 二维字典或查找表?

c# - 像在 C# linq 中一样在 Java 8 中获取匿名对象

C# 闭包堆分配发生在方法开始时

c# - 我如何在 boo 中使用扩展方法

asp.net - 检索 HttpWebResponse 并将其放入 XDocument 的有效方法

c# - 自定义字符串格式 0,0 带斜杠或反斜杠

c# - 如何确保只创建该类对象的一个​​实例?

c# - ASP.NET MVC : passing a complex viewmodel to controller