MVC3 EF 4.1包含条件Linq

时间:2013-04-03 15:04:13

标签: asp.net-mvc-3 linq entity-framework-4

如果在我学习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表达式。

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

提前致谢。

1 个答案:

答案 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子句中投射过滤器,但使用通用存储库会变得棘手。