Linq 向dbContext查询添加联接时出现不明确的调用错误

Linq 向dbContext查询添加联接时出现不明确的调用错误,linq,lambda,dbcontext,Linq,Lambda,Dbcontext,我已经工作了几个小时来完成一些需要花一分钟时间使用TSQL的事情。当我将join语句添加到此方法时,VS会抱怨调用不明确。当我将鼠标悬停在“.Where”上时,弹出提示会从一个监视器转到另一个监视器,因此我很难从中提取任何非常有用的内容。如果我把.Join子句注释掉,一切都会好起来的 谢谢你的指导 public List<CategoryDto> Categories(int departmentId) { IQueryable<Cate

我已经工作了几个小时来完成一些需要花一分钟时间使用TSQL的事情。当我将join语句添加到此方法时,VS会抱怨调用不明确。当我将鼠标悬停在“.Where”上时,弹出提示会从一个监视器转到另一个监视器,因此我很难从中提取任何非常有用的内容。如果我把.Join子句注释掉,一切都会好起来的

谢谢你的指导

        public List<CategoryDto> Categories(int departmentId)
    {
        IQueryable<CategoryDto> categories = null;
        List<CategoryDto> categoriesList = null;
        using (var context = new ApplicationDbContext())
        {
            categories = context.Categories
                .Join(context.CategoryImages, j => j.CategoryId, c => c.CategoryId,
                    (j, c) => new { CategoryImages = j, Categories = c })
                .Where(c => c.DepartmentId == departmentId)
                .OrderBy(c => c.Name)
                .Select(category => new CategoryDto
                {
                    CategoryId = category.CategoryId,
                    DepartmentId = category.DepartmentId,
                    Name = category.Name,
                    Description = category.Description,
                    DisplayOrderRank = category.DisplayOrderRank,
                    IsActive = category.IsActive
                });
            if (categories != null) categoriesList = categories.ToList();
        }
        return categoriesList;
    }
公共列表类别(内部部门ID)
{
IQueryable categories=null;
List categoriesList=null;
使用(var context=new ApplicationDbContext())
{
类别=上下文。类别
.Join(context.CategoryImages,j=>j.CategoryId,c=>c.CategoryId,
(j,c)=>新的{CategoryImages=j,Categories=c})
.其中(c=>c.DepartmentId==DepartmentId)
.OrderBy(c=>c.Name)
.选择(类别=>new CategoryTo
{
CategoryId=category.CategoryId,
部门ID=类别。部门ID,
名称=类别。名称,
描述=类别。描述,
DisplayOrderRank=category.DisplayOrderRank,
IsActive=category.IsActive
});
如果(categories!=null)categoriesList=categories.ToList();
}
返回分类列表;
}
通过使用

.Join(context.CategoryImages, j => j.CategoryId, c => c.CategoryId,
                (j, c) => new { CategoryImages = j, Categories = c })
。。。您创建了一个
IQueryable
,其中T是一个匿名类型,有两个属性,
CategoryImages
Categories
(尽管它们的顺序不对,而且最好使用单数词)。因此,您必须使用这种匿名类型继续LINQ语句,如

.Where(x => x.Categories.DepartmentId == departmentId)
正如在评论中所说,使用joins的综合语法更容易:

from c in context.Categories
join i in context.CategoryImages on c.CategoryId equals i.CategoryId
where c.DepartmentId == departmentId // now this is OK
但更好的做法是根本不编写连接并使用导航属性,如
Category.Images
。顺便说一句,我不知道你为什么要访问
图像
,因为你在最终结果中没有使用它们。目前,加入的唯一效果是您可能会获得非唯一类别。

通过使用

.Join(context.CategoryImages, j => j.CategoryId, c => c.CategoryId,
                (j, c) => new { CategoryImages = j, Categories = c })
。。。您创建了一个
IQueryable
,其中T是一个匿名类型,有两个属性,
CategoryImages
Categories
(尽管它们的顺序不对,而且最好使用单数词)。因此,您必须使用这种匿名类型继续LINQ语句,如

.Where(x => x.Categories.DepartmentId == departmentId)
正如在评论中所说,使用joins的综合语法更容易:

from c in context.Categories
join i in context.CategoryImages on c.CategoryId equals i.CategoryId
where c.DepartmentId == departmentId // now this is OK
但更好的做法是根本不编写连接并使用导航属性,如
Category.Images
。顺便说一句,我不知道你为什么要访问
图像
,因为你在最终结果中没有使用它们。目前,加入的唯一效果是您可能会获得非唯一类别。

通过使用

.Join(context.CategoryImages, j => j.CategoryId, c => c.CategoryId,
                (j, c) => new { CategoryImages = j, Categories = c })
。。。您创建了一个
IQueryable
,其中T是一个匿名类型,有两个属性,
CategoryImages
Categories
(尽管它们的顺序不对,而且最好使用单数词)。因此,您必须使用这种匿名类型继续LINQ语句,如

.Where(x => x.Categories.DepartmentId == departmentId)
正如在评论中所说,使用joins的综合语法更容易:

from c in context.Categories
join i in context.CategoryImages on c.CategoryId equals i.CategoryId
where c.DepartmentId == departmentId // now this is OK
但更好的做法是根本不编写连接并使用导航属性,如
Category.Images
。顺便说一句,我不知道你为什么要访问
图像
,因为你在最终结果中没有使用它们。目前,加入的唯一效果是您可能会获得非唯一类别。

通过使用

.Join(context.CategoryImages, j => j.CategoryId, c => c.CategoryId,
                (j, c) => new { CategoryImages = j, Categories = c })
。。。您创建了一个
IQueryable
,其中T是一个匿名类型,有两个属性,
CategoryImages
Categories
(尽管它们的顺序不对,而且最好使用单数词)。因此,您必须使用这种匿名类型继续LINQ语句,如

.Where(x => x.Categories.DepartmentId == departmentId)
正如在评论中所说,使用joins的综合语法更容易:

from c in context.Categories
join i in context.CategoryImages on c.CategoryId equals i.CategoryId
where c.DepartmentId == departmentId // now this is OK

但更好的做法是根本不编写连接并使用导航属性,如
Category.Images
。顺便说一句,我不知道你为什么要访问
图像
,因为你在最终结果中没有使用它们。目前,联接的唯一效果是可能会得到非唯一类别。

处理联接时,语句语法更容易理解。类似于上下文中c的
。类别在上下文中加入j。CategoryImages在j.CategoryId上等于c.CategoryId…
。只要确保在连接后始终引用带有
j
c
前缀的字段。处理连接时,语句语法更容易理解。类似于上下文中c的
。类别在上下文中加入j。CategoryImages在j.CategoryId上等于c.CategoryId…
。只要确保在连接后始终引用带有
j
c
前缀的字段。处理连接时,语句语法更容易理解。类似于上下文中c的
。类别在上下文中加入j。CategoryImages在j.CategoryId上等于c.CategoryId…
。只要确保在连接后始终引用带有
j
c
前缀的字段。处理连接时,语句语法更容易理解。类似于上下文中c的
。类别在上下文中加入j。CategoryImages在j.CategoryId上等于c.CategoryId…
。只要确保在加入后总是引用带有
j
c
前缀的字段。谢谢Gert。我把你的答案标记为答案,因为你提供了对问题的洞察。至于为什么DTO中没有图像,我没有添加它,因为我不知道如何编写查询。就在几分钟前,我