LINQ Any() 方法中参数与参数类型的问题

7

我有一个带有字符串类型参数'baan_cat_fam_code'的对象。下面的代码是我尝试查找查询中所有具有在通用字符串列表中存在的baan_cat_fam_code的项目catFamCd

query = query.Where(r => r.baan_cat_family_code.Any(s => catFamCode.Contains(s)));

问题在于这段代码无法编译——我收到了一个错误提示。
"Argument type 'char' is not assignable to parameter type 'string'"

由于某些原因,谓词s被定义为字符类型。所以我在.Contains方法的参数中添加了.ToString()。但是,当代码运行时,将查询结果绑定到列表框时,会抛出以下异常。
"The argument 'value' was the wrong type. Expected 'System.Char'. Actual 'System.String'."

这让我感到困惑。非常感谢您的帮助。
谢谢!
2个回答

13
你遇到的问题是,baan_cat_family_code 是一个 string 类型,它实现了 IEnumerable<char> 接口。当你调用 Any 方法时,实际上是在问:

  • 这个 string 中的任何一个 char 是否符合条件?

但你真正想要问的是:

  • 这个 string 是否在列表 catFamCode 中?

试试以下代码,它执行后者:

query = query.Where(r => catFamCode.Contains(r.baan_cat_family_code));

2

您正在对一个字符串调用Any(),它查看的是其元素——也就是chars,因此出现了错误。

正确的做法是:

query = query.Where(r => catFamCode.Contains(r.baan_cat_family_code));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接