方法'Boolean Contains(System.String)'没有支持的SQL转换

zsh*_*arp 14 sql linq-to-sql

"方法'布尔包含(System.String)'没有支持的SQL转换."

查询是IsQueryable但这停止了工作:

foreach (string s in collection1)
{
       if (s.Length > 0)
                {
                    query = query.Where(m => m.collection2.Contains(s));

                }
}
Run Code Online (Sandbox Code Playgroud)

更新:当我使查询"ienumerable"而不是iqueryable时,它工作.使用linq而不是迭代循环获得相同结果的方法是什么?

Sun*_*ise 23

试试这个:

query = query.Where(m => m.collection2.ToList().Contains(s));
                                       ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

  • +1 - 似乎要使LINQ to SQL生成SQL'IN'子句,集合的*compile time*类型必须是*List <T>*.在我的测试中,我有一个List <T>的实例,但查询将其视为IList <T>,我得到了问题中提到的错误.但是,确保查询在编译时将其视为List <T>进行修复. (3认同)

ewa*_*alk 0

看起来您看到的错误来自集合 collection 2。您是否尝试过将 m.collection2 包装在另一个返回 true 或 false 的函数中?这是 LINQ 语法吗?