如果在我学习EF 4.1和LINQ之前有人问过这个问题,我需要专家意见。 我有一个名为HomeIndexData的视图模型。我的代码如下所示:
string _categoryIDs =“100,101,102,103,104”;
列表< int> CategoryIDs = _categoryIDs.Split(',')。选择(t => int.Parse(t));
然后我得到了以下视图模型:
public class HomeIndexData
{
public IEnumerable<Genre> Genres { get; set; }
public IEnumerable<Category> Categories { get; set; }
public IEnumerable<SubCategory> SubCategories { get; set; }
public IEnumerable<Country> Countries { get; set; }
}
目前,在我的控制器中,我有以下代码 -
HomeIndexData viewModel = new HomeIndexData
{
Genres = db.Genres
.Include(i => i.Categories.Where(i => CategoryIDs.Contains(i.CategoryId)))
.Include("Categories.SubCategories")
.OrderBy(g => g.DisplaySequence),
Countries = db.countries
};
但我收到错误:
Cannot convert lambda expression to type 'string' because it is not a delegate type
以下一行:
.Include(i => i.Categories.Where(i => CategoryIDs.Contains(i.CategoryId)))
请问我能指出正确的方向如何编写lamda表达式。
对此的任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:0)
此时EF不支持Include扩展中的复杂表达式,只支持简单的属性getter。如果您认为这是EF的重要增强方案,请考虑在http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1015345-allow-filtering-for-include-extension-method投票。
目前,您最好的选择是在Select子句中投射过滤器,但使用通用存储库会变得棘手。