我试图建立一个动态的泛型方法。创建高级搜索机制。
我可以使用动态 LINQ 实现一些目标
IQueryable<Table> query = ObjectContext.Table;
if (parameters != null && parameters.Count > 0)
{
foreach (KeyValuePair<string, dynamic> keyValuePair in parameters)
{
query = query.Where(keyValuePair.Key + " == @0", new object[] { keyValuePair.Value });
}
}
但是这样做,我需要用这样的东西加载每个字段
ClassTable.Parameters.Add("FKTable.Foo", foo);
ClassTable.Parameters.Add("Bar", bar);
所以我正在尝试其他方法(此代码有效)
List<Table> lstTable = new List<Table>();
lstTable.AddRange(tableDAO.SelectWhere(
u => this.EntityValues.Foo == u.Foo && this.EntityValues.Bar == u.Bar
));
return lstTable;
现在,我的问题是,我想做更多类似的事情(此代码仅带来第一个查询的结果)
List<Table> lstTable = new List<Table>();
lstTable.AddRange(tableDAO.SelectWhere(
u => !string.IsNullOrEmpty(this.EntityValues.Foo) ? this.EntityValues.Foo == u.Foo : false
&&
this.EntityValues.Bar != 0 ? this.EntityValues.Bar == u.Bar : false
));
return lstTable;
我不想做这样的事情
IQueryable<Data.Story> query = ctx.DataContext.Stories;
if (criteria.StoryId != null) // StoryId
query = query.Where(row => row.StoryId == criteria.StoryId);
if (criteria.CustomerId != null) // CustomerId
query = query.Where(row => row.Project.CustomerId == criteria.CustomerId);
if (criteria.SortBy != null) // SortBy
query = query.OrderBy(criteria.SortBy + " " + criteria.SortOrder.Value.ToStringForSql());
我知道我的问题有点混乱,我会提供编辑和评论来解决它。让我知道。
TL;博士; 我需要帮助来创建动态查询,我只需要传递搜索中使用的参数。所以我可以为用户创建一个高级搜索选项。