【问题标题】:'string' does not contain a definition for 'Contains'“字符串”不包含“包含”的定义
【发布时间】:2012-09-10 00:03:24
【问题描述】:

我有这样的声明:

var vals =
    from StandAloneUserPayment saup in _Session.Query<StandAloneUserPayment>()
        .Fetch(x => x.RecurringPayments)
    where
        saup.User.UserId == userId
        && searchString.Contains(saup.FriendlyName, StringComparer.InvariantCultureIgnoreCase)
    select
        saup;

这似乎正是我应该做的,但我得到了Contains 方法的整行,并带有以下消息:

string 不包含Contains 的定义并且最佳扩展方法重载System.Linq.ParallelEnumerable.Contains&lt;TSource&gt;(System.Linq.ParallelQuery&lt;TSource&gt;, TSource, System.Collections.Generic.IEqualityComparer&lt;TSource&gt;) 有一些无效参数

我做错了什么?

【问题讨论】:

    标签: c# linq nhibernate linq-to-nhibernate


    【解决方案1】:

    试试IndexOf:

    searchString.IndexOf(saup.FriendlyName,
                         StringComparison.InvariantCultureIgnoreCase) != -1
    

    它不起作用的原因是因为接受IEqualityComparer&lt;TSource&gt;Contains 扩展方法在String 上运行,它实现IEnumerable&lt;char&gt;,而不是IEnumerable&lt;string&gt;,所以string 和一个IEqualityComparer&lt;string&gt; 不能传递给它。

    【讨论】:

    • 我的智能会和你争论。它告诉我我有三个重载。
    • @JeremyHolovacs:其中一个需要StringComparer? (对不起,我现在不能尝试,但MSDN通常是对的......)
    • @JeremyHolovacs 扩展方法?
    • @JeremyHolovacs:哦,是的,我刚刚意识到Contains 不起作用的原因; String.Contains 是一种特殊情况,因为 stringIEnumerable&lt;char&gt;,而不是 IEnumerable&lt;string&gt;
    • @Paul-SebastianManole:String 上名为 Contains 的方法的文档,该方法接受一个参数,随后的第二个参数不是 IEqualityComparer&lt;string&gt;
    【解决方案2】:

    即使有 Contains(source, item, comparer) 方法,您也不能*将其与 NHibernate 一起使用,因为比较器是代码,而不是 NH 可以翻译的表达式树。

    *:也就是说,除非您编写一个 LINQ 提供程序扩展来为您的比较器生成特殊情况,但事实并非如此。

    【讨论】:

    • 奇怪的是智能感知引导我直接进入问题。 IndexOf 可以满足我的需要,但似乎应该可以。
    【解决方案3】:

    您使用的 .Contains 来自 LINQ - 它将字符串视为 IEnumerable&lt;char&gt;,因此它需要 IEqualityComparer&lt;char&gt;StringComparer 比较器实现 IEqualityComparer&lt;String&gt;

    如果 minitech 的 IndexOf 方法有效,我认为这将是最简单的方法。

    【讨论】:

      【解决方案4】:

      将以下命名空间添加到您的类中,

      using System.Linq;
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-08-14
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        相关资源
        最近更新 更多