过滤多列上的列表

时间:2015-04-07 20:59:15

标签: c# asp.net linq

我需要根据多列过滤我的列表。这是我需要搜索的课程

public class psdata
    {
        public int ID { get; set; }
        public string Customer { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Zip { get; set; }
        public decimal? Identification { get; set; }
        public decimal? Assesment { get; set; }
        public decimal? PayoffLedger { get; set; }
        public decimal? RentRestrictions { get; set; }
        public decimal? CCR { get; set; }
        public decimal SubTotal { get; set; }
    }

这是我的linq查询查看我的列表,然后如果它包含在列中,则会找到搜索词。

var sl = list.Where<psdata>( c => c.Address.ToLower().Contains(text));

这适用于第一列。但是,如果我想添加另一列,那么。

var sl = list.Where<psdata>( c => c.Address.ToLower().Contains(text) || c => c.City.ToLower().Contains(text));

我收到错误

Operator || cannot be applied to operands of the type bool and psdata.

我在这里做错了什么?

4 个答案:

答案 0 :(得分:6)

您唯一的问题是第二个c =>。您仍然只传递一个Lambda表达式,它只需要包含||运算符:

var sl = list.Where(c => c.Address.ToLower().Contains(text) ||
    c.City.ToLower().Contains(text));

答案 1 :(得分:2)

var sl = list.Where<psdata>( c => c.Address.ToLower().Contains(text) || c => c.City.ToLower().Contains(text));

应该是

var sl = list.Where<psdata>( c => c.Address.ToLower().Contains(text) || c.City.ToLower().Contains(text));

你不需要第二个&#39;去&#39;表达式中的=>运算符。

答案 2 :(得分:2)

如果您查看Where条款的签名,则需要Func<TSource, Boolean>。意思是你必须传入一个接受类型TSource的函数,并返回boolean。我们传递一个匿名函数作为参数。匿名函数的语法是(argument)=>{ expression }。因此,您的代码可以解释为

list.Where<psdata>(Func<psdata,bool>||Func<psdata,bool>)

显然不会像预期的那样表现。所以解决方案是

list.Where<psdata>(c => c.Address.ToLower().Contains(text) 
|| c.City.ToLower().Contains(text));

答案 3 :(得分:1)

问题是你将多个lambda表达式传递给where而不是在lambda表达式中使用&&||来组合多个比较。

此; c => c.Address.ToLower().Contains(text) || c => c.City.ToLower().Contains(text)

应该是; c => c.Address.ToLower().Contains(text) || c.City.ToLower().Contains(text)