0

抱歉,如果在我学习 EF 4.1 和 LINQ 之前有人问过这个问题,我需要专家意见。我有一个名为 HomeIndexData 的视图模型。我的代码如下所示:

字符串 _categoryIDs = "100,101,102,103,104";

List <int> CategoryIDs = _categoryIDs.Split(',').Select(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 表达式。

对此的任何帮助将不胜感激。

提前致谢。

4

1 回答 1

0

EF 目前不支持 Include 扩展中的复杂表达式,仅支持简单的属性获取器。如果您认为这是 EF 的重要增强方案,请考虑在http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1015345-allow-filtering-for-include投票-扩展方法

目前,您最好的选择是在 Select 子句中投影您的过滤器,但是使用通用存储库会变得很棘手。

于 2013-04-04T14:24:32.343 回答