LINQ:如何构建IQueryable<;CustomMadeType>;基于实体属性的搜索条件,包括多对多关系
我努力构建并轻松找到正确的信息,以定义多对多标准的LINQ表达式,因此Q&A 请修改/改进/更正/ 基本情况:LINQ:如何构建IQueryable<;CustomMadeType>;基于实体属性的搜索条件,包括多对多关系,linq,many-to-many,iqueryable,Linq,Many To Many,Iqueryable,我努力构建并轻松找到正确的信息,以定义多对多标准的LINQ表达式,因此Q&A 请修改/改进/更正/ 基本情况: Net实体框架代码优先 我们与UnitOfWork回购公司合作,但这在这里并不重要 我们定义了一个IQueryable查询 用户通过表单提交其搜索条件,每个条件直接匹配MyCustomMadeEntity的属性,或与MyCustomMadeEntity有多对多关系的另一个实体的属性,例如: (如果LocationType是自定义的枚举 构建一个基IQueryable表示数据库源以及
- Net实体框架代码优先
- 我们与UnitOfWork回购公司合作,但这在这里并不重要
- 我们定义了一个
查询IQueryable
- 用户通过表单提交其搜索条件,每个条件直接匹配MyCustomMadeEntity的属性,或与MyCustomMadeEntity有多对多关系的另一个实体的属性,例如:
IQueryable
表示数据库源以及基表与其他表(join等)的链接Thx@marc_s用于编辑
public class MyCustomMadeEntity : BaseEntity
{
public string ArticleCode { get; set; }
public string Comment { get; set; }
public Guid? ColorId { get; set; }
public ArticleColor Color { get; set; }
public ICollection<ArticleStatus> ArticleStatuses { get; set; }
}
public class MyCustomMadeEntity : BaseEntity
{
// properties
Public LocationType LocationType { get; set; }
}
IQueryable<CustomMadeEntity> query = _UnitOfWork. ustomMadeEntityRepository
.Queryable()
.Include(el => el.OtherEntity);
query = PerformAdvancedSearch(criteria, query);
public static IQueryable<CustomMadeEntity> PerformAdvancedSearch(SearchRequestDto criteria, IQueryable< CustomMadeEntity > query)
{
if (!string.IsNullOrWhiteSpace(criteria.ArticleCode))
{
query = query.Where(el => el. ArticleCode == criteria. ArticleCode));
}
}
if (something)
{
query = query.Where(el => el.ArticleStatuses.OrderByDescending(el => el.CreatedOn).Any() &&
el.ArticleStatuses.OrderByDescending(el => el.CreatedOn)
.FirstOrDefault().LocationType == criteria.LocationType);
}