我正在尝试实现一种方法,其中存储在数据库中的事件关键字(以逗号分隔)与给定字符串以逗号分隔相匹配。
public List<TblActivities> SearchByMultipleKeyword(string keywords)
{
string[] keyword = keywords.Split(',');
var results = (from a in Entities.TblActivities
where a.Keywords.Split(',').Any(p => keyword.Contains(p))
select a).ToList();
return results;
}
我收到以下错误:
LINQ to Entities does not recognize the method 'System.String[] Split(Char[])' method,
and this method cannot be translated into a store expression.
最佳答案
如错误消息所述,您不能使用 Entity Framework 执行此操作。
但是,还有其他选择。
一个选择是意识到,如果关键字存储为 A,B,C,D
,那么 x
就在那里,如果
a.Keywords.StartsWith(x + ",") ||
a.Keywords.Contains("," + x + ",") ||
a.Keywords.EndsWith("," + x)
如果 x
不包含 ,
本身,这将起作用。缺点是这将对表或包含 Keywords
列的索引进行全面扫描。
另一种选择是规范化您的数据库。毕竟,事件和关键字之间存在一对多关系。然后这样建模:除了 Activities
表(没有 Keywords 列)之外,还有一个包含两列的 KeyWords
表,一个事件表的外键,以及keyword
列。这将允许您在 keyword
列上添加索引,这可以使查询超快。
更新
我重新阅读了您的问题,发现您没有测试关键字相等性,而只是测试包含
。如果是这样,您为什么不执行以下操作?
a.Keywords.Contains(x)
关于c# - LINQ to Entities 无法识别方法 'System.String[] Split(Char[])' 方法,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23929801/