Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Linq使用谓词不工作_Asp.net_Linq - Fatal编程技术网

Asp.net 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>

我创建了一个小的测试类,它从xml文件返回数据

我现在想使用linq使其更具动态性,但无法使其工作

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()
    命令上执行。我想这取决于您对函数的期望,以及您的需求是否可以接受
    在您的file@Andomar-已包含顺便说一句,您应该始终发布整个异常消息。虽然有时很长很难阅读,但它可能已经包含了问题的解决方案
    在您的file@Andomar-已包含顺便说一句,您应该始终发布整个异常消息。虽然有时很长很难阅读,但它可能已经包含了您问题的解决方案。Aleady包括linq名称空间-请参见上文-变量贷方是IEnumerablealealeady包括linq名称空间-请参见上文-变量贷方是IEnumerableThanks dominic-这两种方法都有效,但是我使用2是因为你提到的原因。谢谢dominic-这两个作品,但是我使用2是因为你提到的原因。