【发布时间】:2014-09-08 16:12:15
【问题描述】:
我有两个模型,它们都包含一个 ICollection 对象,如下所示:
public class Business : ApplicationUser
{
...
public virtual ICollection<Subcategory> Subcategories { get; set; }
...
}
public class Request
{
....
public virtual ICollection<Subcategory> Subcategories { get; set; }
...
}
我想查询商家并获取其子类别与请求中的商家匹配的商家(即使一个匹配就足够了)。我有这样的东西,我只是作为示例写的,当然它不起作用(请求是请求类型):
foreach (var subcategory in request.Subcategories)
{
var businesses = db.Users
.OfType<Business>()
.Where(b => b.Subcategories
.Where(s => s.SubcategoryName == subcategory.SubcategoryName));
}
例如,假设我们有两个业务,其中第一个包含足球和篮球作为子类别,第二个包含篮球和网球。然后,假设我们的用户同时选择了 Football 和 Tennis 子类别,所以我的查询应该返回这两个业务,因为第一个包括 Football,第二个包括 Tennis。
因此,并非每个子类别都应该匹配,即使一个匹配也足以接受业务。我怎样才能实现它?如果你能提供代码我会很高兴。
这也是我的子类别模型,以备不时之需:
public class Subcategory
{
public int SubcategoryID { get; set; }
public string SubcategoryName { get; set; }
}
【问题讨论】:
-
这是在 ORM 中运行还是在 Linq2Objects 中运行?
-
var businesses = db.Users.OfType<Business>().Where(b => b.Subcategories.Where(s => s.SubcategoryName == subcategory.SubcategoryName));当您通过代码时,您对企业的价值是什么......我猜您还没有通过代码 -
Where 返回一个可枚举的,所以你的第一个 Where 就像 Where (b=>EnumerableButBoolExpected)
-
不要在你的问题中说“它不起作用”。始终告诉我们您收到的错误信息,或具体描述不良行为。
标签: c# linq collections