Asp.net Linq使用谓词不工作
我创建了一个小的测试类,它从xml文件返回数据 我现在想使用linq使其更具动态性,但无法使其工作Asp.net Linq使用谓词不工作,asp.net,linq,Asp.net,Linq,我创建了一个小的测试类,它从xml文件返回数据 我现在想使用linq使其更具动态性,但无法使其工作 public class LenderCollection { string fileName = "C:\\Lenders.xml"; public IEnumerable<Lender> Lenders { get; set; } public void FetchLenders(Expression<Func<Lender, bool>
public class LenderCollection
{
string fileName = "C:\\Lenders.xml";
public IEnumerable<Lender> Lenders { get; set; }
public void FetchLenders(Expression<Func<Lender, bool>> predicate = null)
{
IEnumerable<Lender> lenders = XmlHelper.GetObjectFromXml<List<Lender>>(fileName, "AllLenders");
Lenders = predicate.IsNotNull() ? lenders.Where(predicate) : lenders;
}
}
公共类借贷者集合
{
string fileName=“C:\\Lenders.xml”;
公共IEnumerable出借人{get;set;}
公共谓词(表达式谓词=null)
{
IEnumerable leaders=XmlHelper.GetObjectFromXml(文件名为“AllLeaders”);
贷方=谓词.IsNotNull()?贷方。其中(谓词):贷方;
}
}
Visual Studio在“贷方.何处(谓词)”一节中出现错误-消息为“…不包含何处的定义…”
知道我做错了什么吗
*更新*
这似乎与谓词有关-。Where在其他情况下可用。它抱怨说,任何类型的
贷方
都没有.Where
方法。这是因为:
- 您还没有包括使用System.Linq的
代码>
贷方的类型不是
或类似类型IEnumerable
贷款人
都没有.Where
方法。这是因为:
- 您还没有包括使用System.Linq的
代码>
贷方的类型不是
或类似类型IEnumerable
,其中
扩展IEnumerable
,并采用表达式类型的参数
您有两个选择:
如果希望将参数谓词保持为表达式,请使用IQueryable
而不是IEnumerable
(只需调用.AsQueryable()
),即可轻松完成此操作
对于谓词
参数,使用类型Func
而不是表达式
。由于您是从文件加载数据,因此在IEnumerable
上使用IQueryable
没有任何意义
没有扩展方法Where
扩展IEnumerable
,并获取类型为Expression
的参数
您有两个选择:
如果希望将参数谓词保持为表达式,请使用IQueryable
而不是IEnumerable
(只需调用.AsQueryable()
),即可轻松完成此操作
对于谓词
参数,使用类型Func
而不是表达式
。由于您是从文件加载数据,因此在IEnumerable
上使用IQueryable
没有任何意义
替换:
lenders.Where(predicate)
与:
两者都应该能够返回IEnumerable
这样做的主要缺点是查询将在.ToList()
命令上执行。我想这取决于您对功能的期望,以及您的需求是否可以接受。替换:
lenders.Where(predicate)
与:
两者都应该能够返回IEnumerable
这样做的主要缺点是查询将在.ToList()
命令上执行。我想这取决于您对函数的期望,以及您的需求是否可以接受使用System.Linq.Expressions编码>和代码>在您的file@Andomar-已包含顺便说一句,您应该始终发布整个异常消息。虽然有时很长很难阅读,但它可能已经包含了问题的解决方案使用System.Linq.Expressions编码>和代码>在您的file@Andomar-已包含顺便说一句,您应该始终发布整个异常消息。虽然有时很长很难阅读,但它可能已经包含了您问题的解决方案。Aleady包括linq名称空间-请参见上文-变量贷方是IEnumerablealealeady包括linq名称空间-请参见上文-变量贷方是IEnumerableThanks dominic-这两种方法都有效,但是我使用2是因为你提到的原因。谢谢dominic-这两个作品,但是我使用2是因为你提到的原因。