【发布时间】:2022-02-22 22:08:46
【问题描述】:
我为检索所需数据而编写的 SQL 查询。
Select JobQuestionType
From JobQuestionTypes AS J
INNER JOIN JobQuestions AS JQ ON J.JobQuestionTypeId = JQ.QuestionType
Where JobId = 3813 AND Active = 1
Order By JobQuestionId ASC
对于上述 SQL 查询,我使用 c# 编写了 LINQ 查询,如下所示。
var questionTypes = _context.JobQuestionTypes.Join(_context.JobQuestions,
jobQuestionTypes => jobQuestionTypes.JobQuestionTypeId,
jobQuestions => jobQuestions.JobQuestionType,
(jobQuestionTypes, recruiters) => new { jobQuestionTypes, recruiters })
.Where(item => item.JobId.Equals(JobId) && !item.jobQuestionTypes.Active)
.Select(item => item.jobQuestionTypes.JobQuestionType).OrderBy(x => x.JobQuestionId).ToList();
我收到一个错误
方法 'Queryable.Join
(IQueryable, IEnumerable, 表达式 >, 表达式 >, Expression >)' 不能从 用法。尝试明确指定类型参数。
我该如何解决。我是 C# 新手。
(我正在从我的 sql 查询中获得预期的输出。我想将其转换为 linq)
谢谢。
【问题讨论】:
-
可能
jobQuestionTypes.JobQuestionTypeId和jobQuestions.JobQuestionType有不同的类型。 -
一开始就不要使用 JOIN。 LINQ 不是 SQL 的替代品。您使用的是 ORM 和实体,而不是嵌入式 SQL 和表。人们使用 ORM 的全部原因是他们可以编写面向对象的代码,包括属性、关系和集合,而不是 SQL 和 JOIN。您的查询应该类似于
_context.JobQuestionTypes.Where(jt=>jt.Active && jt.Questions.Any(q=>q.JobId=12345)).Select(jt=>jt.JoqQuestionType) -
查询形式相同:
from jq in _context.JobQuestionTypes from q in jq.Questions where jq.Active && q.JobId=12345 select jq.JobQuestionType。 EF Core 的工作是根据集合JobQuestionType.Questions表示的 JobQuestionType 和 JobQuestion 之间的关系生成 JOIN -
@SvyatoslavDanyliv Nope..both are int
-
什么是
JobQuestionTypes.JobQuestionType,它与JobQuestions.JobQuestionType相比如何?
标签: c# sql-server linq