无法将lambda表达式转换为类型“string”,因为它不是委托类型?

时间:2014-05-09 10:30:45

标签: c# lambda asp.net-mvc-5

       var viewModel = new CoachIndexData();

        viewModel.Coaches = db.Coaches
            .Include(i => i.Courses.Select(c => c.Department))
            .OrderBy(i => i.LastName);

我无法理解如何做到这一点。我是ASP.NET MVC的新手

3 个答案:

答案 0 :(得分:3)

取自Cannot convert lambda expression to type 'string' because it is not a delegate type

这对我有用。

使用Entity Framework 4.1的Include()方法具有扩展方法,并且它还接受lambda表达式。所以

context.CustomerSites.Include(c => c.Customer);

完全有效,您需要做的就是使用它:

using System.Data.Entity;

答案 1 :(得分:1)

你的问题在于这一行:

.Include(i => i.Courses.Select(c => c.Department))

documentation中所述,Include方法需要字符串参数而不是lambda表达式。

您需要向Include提供指向"导航"的路径。 (即,如何在您的上下文中设置导航属性)到所需信息。在你的情况下,我相信这将是:

.Include("Department")

希望有所帮助。

答案 2 :(得分:0)

我有同样的问题,我用以下

解决了
using System.Linq.Dynamic;
using System.Linq;

代码在这里..

public IPagedList<Inv_AMC> Gets(int? page, int? pageSize, string sort = "Id", string sortdir = "DESC", string searchKey = "")
        {
            int pageIndex = page.HasValue ? Convert.ToInt32(page) : 1;
            int pageSizeValue = pageSize.HasValue ? Convert.ToInt32(pageSize) : 10;
            return dbSet.Where(x => (x.Customer.CustomerName.ToUpper().Contains(searchKey.ToUpper()) || searchKey == ""))
                  .OrderBy(sort + " " + sortdir)
                  .ToPagedList(pageIndex, pageSizeValue);
        }

其中Inv_AMC和Customer是db对象并互相引用。