Я пытаюсь перевести код SQL, который я написал с объединением, в код linq на C #, но я не понимаю, что я делаю неправильно.
У меня есть две таблицы, одна из которых tTask
идругой - tTask_Users
.
Я попытался объединить их, используя модель, потому что я думал, что это дает мне ошибки, потому что у данных не было одинакового количества столбцов.
Вот мой код SQL:
SELECT PK_Task, TaskName, Enabled, FK_TaskTeam, 'No Owner' AS Owners
FROM tTask
WHERE hasOwner = 0
UNION
SELECT PK_Task, TaskName, Enabled, FK_TaskTeam, Login
FROM tTask
INNER JOIN tTask_User ON tTask.PK_Task = tTask_User.FK_Task
INNER JOIN tOfficeUsers on tTask_User.FK_OfficeUser = tOfficeUsers.PK_OfficeUser
WHERE FK_Taskrecipienttype = 5 AND Enabled = 1
Вот что я пытался
private OfficeEntities db = new OfficeEntities();
//GET: api/MainGrid
public IQueryable<MainGridDto> GetGridModelDtos()
{
var query2 = db.tTask_User.Where(task =>
task.tTaskRecipientType.pk_taskrecipienttype == 5
);
var query = from items in query2
select new MainGridDto()
{
PK_Task = items.FK_Task,
TaskName = items.tTask.TaskName,
TaskRecipientType = items.tTaskRecipientType,
Owner = items.tOfficeUser.Login,
TaskDescription = items.tTask.TaskDescription,
Enabled = items.tTask.Enabled,
tTaskTeam = items.tTask.tTaskTeam,
EmailBody = items.tTask.EmailBody,
EmailSubject = items.tTask.EmailSubject
};
var taskquery = db.tTasks.Where(items =>
items.hasOwner == 0
);
var querytask = from items in taskquery
select new MainGridDto()
{
PK_Task = items.PK_Task,
TaskName = items.TaskName,
TaskRecipientType = null,
Owner = "no owner",
TaskDescription = items.TaskDescription,
Enabled = items.Enabled,
tTaskTeam = items.tTaskTeam,
EmailBody = items.EmailBody,
EmailSubject = items.EmailSubject
};
query2.Union(querytask);
query.Union(taskquery);
}
Вот ошибки, которые я получаю:
Severity Code Description Project File Line Suppression State
Error CS1929 'IQueryable<tTask_User>' does not contain a definition for 'Union' and the best extension method overload 'ParallelEnumerable.Union<MainGridDto>(ParallelQuery<MainGridDto>, IEnumerable<MainGridDto>)' requires a receiver of type 'ParallelQuery<MainGridDto>' ReportingWebAPI \source\repos\ReportingWebAPI\ReportingWebAPI\Controllers\MainGridController.cs 56 Active
Severity Code Description Project File Line Suppression State
Error CS1929 'IQueryable<MainGridDto>' does not contain a definition for 'Union' and the best extension method overload 'ParallelEnumerable.Union<tTask>(ParallelQuery<tTask>, IEnumerable<tTask>)' requires a receiver of type 'ParallelQuery<tTask>' ReportingWebAPI \repos\ReportingWebAPI\ReportingWebAPI\Controllers\MainGridController.cs 57 Active