LINQ - NHibernate:一个列表项包含所有其他列表项

时间:2012-04-13 00:27:33

标签: asp.net-mvc-3 linq nhibernate c#-4.0 fluent-nhibernate

我有这个结构:

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,所以即使是最新的解决方案也非常受欢迎。

提前致谢。

1 个答案:

答案 0 :(得分:1)

FooAttribute fooAttributeAlias=null;
Session.QueryOver<Foo>().Inner.JoinAlias(x=>x.Attributes,()=>fooAttributeAlias)
.WhereRestrictionOn(()=>fooAttributeAlias).IsNotEmpty
.List();

我不明白你写的查询。我不确定上面的查询是否符合您的预期,请参阅生成的sql并查看它是否正确。 另外可能有帮助的是您期望看到的sql查询,它将为您提供正确的结果。