选择具有所有给定标签的EF实体(其中标签是EF实体)

时间:2012-06-26 08:37:55

标签: c# .net linq entity-framework linq-to-entities

我有以下情况: 一个“对话”实体/表,它有多个与之关联的标签。 Tag也是一个实体/表 - 键/ id是tagName(一个字符串)。

在客户端(javascript)我处理标签时使用字符串数组。

现在我想要检索所有包含所有给定标记的会话。


输入是一个字符串数组,输出应该是Conversations的集合

我试过了:

var filterTags = new List<EFModels.Tag>();
foreach (var tagName in tags)
            {
               filterTags.Add(new EFModels.Tag() { Name = tagName});
            }

var conversations = from c in context.Conversations where !c.Tags.Except(filterTags).Any() select c ;

问题是:Unable to create a constant value of type 'EFModels.Tag'. Only primitive types or enumeration types are supported in this context - 这是有道理的。

现在我该如何选择?什么是最好的方法? (我仍然想使用linq而不是写sql select)

1 个答案:

答案 0 :(得分:1)

您可以将c.Tags投影到标记名称。

我猜它会是那样的

var conversations = from c in context.Conversations where !c.Tags.Select(tag => tag.Name ).Except(filterTags).Any() select c ;

其中filterTags是包含标记名称的字符串列表