blg*_*boy 5 c# linq-to-entities entity-framework
用户界面允许用户选择一个或多个标签。我想选择所有具有用户输入的所有标记相关联的节点,而不仅仅是单个标记。
public JsonResult SearchNodesByTags(string[] tags)
{
var dbTags = _DbContext.Tags.Where(t => tags.Contains(t.DisplayName)).ToList();
var nodes = _DbContext.Nodes.Where(n => n.Tags.Intersect(dbTags).Any());
// Error about intersection with non primitive
return Json(nodes);
}
Run Code Online (Sandbox Code Playgroud)
您可以在一个语句中执行此操作:
var nodes = _DbContext.Nodes
.Where(n => n.Tags.All(t => tags.Contains(t.DisplayName)));
Run Code Online (Sandbox Code Playgroud)
您的陈述不正确,因为dbTags是包含Tag对象的本地列表。在 LINQ-to-Entities 表达式中使用此列表时,无法将这些对象转换为 SQL 变量。这仅适用于原始值。