我有这个结构:
class Foo {
IList<FooAttribute> Attributes { get; set; }
}
class FooAttribute {
bool IsSelected { get; set; }
string Value { get; set; }
}
我有像这样的对象:
IQuerable<Foo> foos; // Database repository object .AsQuerable()
IList<FooAttribute> attrs;
我只需要过滤具有 attrs 列表所有属性的 foos 项目。 我试过这个:
foos = foos.Where(foo =>
attrs.All(a =>
foo.Attributes.Any(at => at.Value == a)));
var filteredFoos = foos.ToList();
我觉得它会起作用,但会超级慢......它会抛出NotSupportedException ......
顺便说一句......我使用ASP.NET MVC 3和C#4.0,所以即使是最新的解决方案也非常受欢迎。
提前致谢。
答案 0 :(得分:1)
FooAttribute fooAttributeAlias=null;
Session.QueryOver<Foo>().Inner.JoinAlias(x=>x.Attributes,()=>fooAttributeAlias)
.WhereRestrictionOn(()=>fooAttributeAlias).IsNotEmpty
.List();
我不明白你写的查询。我不确定上面的查询是否符合您的预期,请参阅生成的sql并查看它是否正确。 另外可能有帮助的是您期望看到的sql查询,它将为您提供正确的结果。