tet*_*ett 4 c# linq collections
我有两个模型,其中两个都包含ICollection对象,如下所示:
public class Business : ApplicationUser
{
...
public virtual ICollection<Subcategory> Subcategories { get; set; }
...
}
public class Request
{
....
public virtual ICollection<Subcategory> Subcategories { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
我想查询业务并获得其子类别与请求中的子类别匹配的业务(即使一个匹配就足够了).我有类似的东西,我只是作为样本编写,当然它不起作用(请求类型为Request):
foreach (var subcategory in request.Subcategories)
{
var businesses = db.Users
.OfType<Business>()
.Where(b => b.Subcategories
.Where(s => s.SubcategoryName == subcategory.SubcategoryName));
}
Run Code Online (Sandbox Code Playgroud)
因此,举例来说,假设我们有两个企业,第一个有足球和篮球作为子类别,第二个有篮球和网球.然后,假设我们的用户选择了足球和网球子类别,所以我的查询应该返回两个商家,因为第一个包括足球,第二个包括网球.
因此,并非每个子类别都应该匹配,即使一个匹配也足以接受业务.我怎样才能实现它?如果你能提供代码,我会很高兴.
这里也是我的子类别模型,如果你需要它:
public class Subcategory
{
public int SubcategoryID { get; set; }
public string SubcategoryName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
查看Linq方法的签名.特别是,哪里
Enumerable.Where<TSource> Method (IEnumerable<TSource>, Func<TSource, Boolean>)
Run Code Online (Sandbox Code Playgroud)
期望一个返回布尔值的谓词. Where返回一个集合,因此您无法将其插入到期望Func返回布尔值的Where子句中; 那不行.
您可能需要的是这样的:
var businesses = db.Users.OfType<Business>()
.Where(b => b.Subcategories
.Any(s => s.SubcategoryName == subcategory.SubcategoryName));
Run Code Online (Sandbox Code Playgroud)
注意使用Any.Any返回一个boolean值,指示是否找到与您的谓词匹配的记录s => s.SubcategoryName == subcategory.SubcategoryName
| 归档时间: |
|
| 查看次数: |
10624 次 |
| 最近记录: |