2011-01-19 55 views
0

我想实现一个模块进行过滤和分页。我明白,要结束我不得不使用动态Linq或反射,所以我开始尝试使它的工作..但由于包含文本的字段被过滤在一对多关系EF不喜欢它。OrderBy与动态Linq和一对多关系在EF

此代码做工精细..但是是静态的:

List<Domain.Entities.Action> actions = db.Actions.Include("Menus").Include("ActionDetails") 
               .Where(x => x.ActionDetails.Any(y => y.Language.Culture == _currentCulture)) 
               .OrderBy(y => y.ActionDetails.Select(z => z.Title).Max()).Skip((pager.Index - 1) * pager.Take).Take(pager.Take) 
               .ToList(); 

我想

。选择(Z => z.Title)

动态..

有人可以帮助我..我尝试了很多东西..但没有成功

Ju。

+0

我认为这会工作EF ..支持他的方法重载..并没有别的..因为它总是说不支持我的扩展(重载)的函数Select .. with string parameter ..(我在函数中构造我自己的lambda表达式。 )我想我必须使用SQL ..不是我最喜欢的解决方案.. – Julien 2011-01-19 15:10:18

回答

1

为了做到这一点,你需要的参数传递Funt<Action, TResultType>searchCriteria

不知道你的方法签名是什么样子,但如果你打算返回List<string>

public List<string> PerformSearch(Func<Action, string> selectCriteria) 
{ 

    return db.Actions.Include("Menus").Include("ActionDetails") 
     .Where(x => x.ActionDetails.Any(y => y.Language.Culture == _currentCulture)) 
     .OrderBy(y => y.ActionDetails.Select(**selectCriteria**).Max()) 
     .Skip((pager.Index - 1) * pager.Take).Take(pager.Take) 
     .ToList(); 
}