我正在尝试使用C#实体框架实现标记系统。对于两个或多个预期都存在以返回结果的标记,我无法获取所需的查询。我有很多对很多的关系(首先是FK,首先是数据库),并且当所有选择的标签都存在时,我试图获取一个对象。对象-LookupTable-属性。我将选定的标签解析为一个列表,然后尝试仅获取存在此列表中所有标签的那些对象。它似乎导致了我对“任何”运算符而不是“所有”运算符的期望。
List<string> intersectTags = new List<string>();
foreach (object i in ef.objects.Where(o => o.Attributes.All(attribute =>
intersectTags.Contains(attribute.AttributeNK))))
更新:还需要获取ef.Object具有比intersectTags更多的标签的实例。过滤其中intersectTags是Object.Attributes子集的实例。
万一您的属性是所选标签的子集,您的代码将失败。
如果在intersectTags是o.Attributes的子集时要查找匹配项,请尝试逆转检查。
不幸的是,Linq to Entity不支持这种语法,我们需要ToList()
加载对象并执行Linq To Objects。
它应该可以工作,但是会影响性能(如果有更好的解决方案,我会发布更新):
List<string> intersectTags = new List<string>();
foreach (object i in ef.objects.ToList().Where(intersectTags.All(tags =>
o.Attributes.Any(attribute => attribute.AttributeNK == tags))))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句