我正在尝试使用 LINQ for Entities(EF4 代码优先)选择一些记录。
我有一个名为 Monitoring 的表,其中包含一个名为 AnimalType 的字段,其值如下
- “狮子,老虎,山羊”
- 《蛇、狮、马》
- “响尾蛇”
- 《山狮》
我想在字符串数组 (animalValues) 中传递一些值,并从 Monitorings 表返回其中字段 AnimalType 中的一个或多个值与 animalValues 中的一个或多个值匹配的行。以下代码几乎可以按我的意愿工作,但我发现我采用的方法存在一个重大缺陷。
public IQueryable<Monitoring> GetMonitoringList(string[] animalValues)
{
var result = from m in db.Monitorings
where animalValues.Any(c => m.AnimalType.Contains(c))
select m;
return result;
}
为了解释这个问题,如果我传入 animalValues = { "Lion", "Tiger" } 我发现选择了三行,因为第 4 条记录“Mountain Lion”包含它认为的“Lion”这个词匹配。
这不是我想要发生的。我需要“Lion”来匹配“Lion”而不是“Mountain Lion”。
另一个例子是,如果我传入“Snake”,我会得到包含“Rattlesnake”的行。我希望有人有更好的 LINQ 代码,它允许匹配精确的逗号分隔值,而不仅仅是匹配“响尾蛇”的“蛇”中的一部分。