gpt4 book ai didi

linq - PredicateBuilder无法转换为IQueryable吗?

转载 作者:行者123 更新时间:2023-12-04 17:26:11 24 4
gpt4 key购买 nike

我有一个功能:

private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
{
...snip...
}

现在哪个执行LINQ查询:
private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
{
return list.Where(item => item.Name.ContainsText(keyword)
|| item.Description.ContainsText(keyword)
...snip...
);
}

这段代码运行良好。

但是 i need to convert it要使用 PredicateBuilder :
private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
{
var predicate = PredicateBuilder.False<Promotion>();

predicate = predicate.Or(item => item.Name.ContainsText(keyword)
|| item.Description.ContainsText(keyword)
...snip...
);

return list.Where(predicate);
}

奇怪的是,它不会编译。失败的行是:
return list.Where(predicate);

您可以选择以下错误:
  • 实例参数:无法从'System.Collections.Generic.IEnumerable'转换为'System.Linq.IQueryable'
  • 'System.Collections.Generic.IEnumerable'不包含'Where'的定义,最佳扩展方法重载'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable,System.Func)'无效参数
  • 参数2:无法从“System.Linq.Expressions.Expression>”转换为“System.Func”

    有什么问题? IEnumerable进入,IEnumerable出来。

    我会说实话,我读过the page on PredicateBuilder ,但我对的任何都不理解。

    为什么需要更改为PredicateBuilder的提示是:
    private IEnumerable<Promotion> MatchesKeyword(IEnumerable<Promotion> list, String keyword)
    {
    var predicate = PredicateBuilder.False<Promotion>();

    predicate = predicate.Or(item => item.Name.ContainsText(keyword)
    || item.Description.ContainsText(keyword)
    ...snip...
    );

    DateTime dt = TryStrToDate(keyword);
    if (dt)
    predicate = predicate.Or(item => item.PromotionDate == dt);

    return list.Where(predicate);
    }

    ...不是我需要理由,问题,实际例子或研究工作来提出问题。

  • 最佳答案

    PredicateBuilder需要IQueryable<T>来完成其魔术。只需将示例中的最后一行更改为

    return list.AsQueryable().Where(predicate);

    使它工作。

    关于linq - PredicateBuilder无法转换为IQueryable吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9067373/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com