0

我有这个结构:

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

提前致谢。

4

1 回答 1

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

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

于 2012-04-13T08:36:24.723 回答