我需要根据多列过滤我的列表。这是我需要搜索的课程
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.
我在这里做错了什么?
答案 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)