#c# #linq #join
#c# #linq #Присоединиться
Вопрос:
Я объединяю таблицы по двум столбцам и мне нужно найти записи, в которых третий столбец не совпадает.
Запрос linq, который у меня есть, вернет правильные записи из таблицы 1, но я не могу выбрать столбец даты из второй таблицы.
Я пробовал группировать результаты, но возникли проблемы с условием «где не равно».
Итак, у меня есть эти записи:
Таблица 1: 4SONS, 112, 03.09.2016
Таблица 2: 4SONS, 112, 26.09.2016
Что мне нужно вернуть, так это — 4SONS, 112, 03.09.2016, 26.09.2016
Но мой запрос возвращает только — 4SONS, 112, 03.09.2016 без возможности получить эту дату из таблицы 2. Это только 3 столбца в каждой таблице.
var query = from s in schedTable.AsEnumerable()
where s.Field<DateTime?>("AuditDate").HasValue
join c in completeTable.AsEnumerable()
on new { account = s.Field<string>("Account").ToString(), store = s.Field<string>("Store").ToString()}
equals new { account = c.Field<string>("Account").ToString(), store = c.Field<string>("Store").ToString() }
where s.Field<DateTime>("AuditDate").Date != c.Field<DateTime>("AuditDate").Date
select s;
var typeD = query.ToList();
Комментарии:
1. Результат, по-видимому, не может быть списком записей данных. Создайте класс и используйте
select new YourClass { ... }
. Или анонимный тип.
Ответ №1:
Это сделает то, что вы ищете:
var query = from s in schedTable.AsEnumerable()
where s.Field<DateTime?>("AuditDate").HasValue
join c in completeTable.AsEnumerable()
on new { account = s.Field<string>("Account").ToString(), store = s.Field<string>("Store").ToString()}
equals new { account = c.Field<string>("Account").ToString(), store = c.Field<string>("Store").ToString()}
where s.Field<DateTime>("AuditDate").Date != c.Field<DateTime>("AuditDate")
select new {
account = s.Field<string>("Account"),
store = s.Field<string>("Store"),
sched = s.Field<DateTime>("AuditDate"),
comp = c.Field<DateTime>("AuditDate")
};
var typeD = query.ToList();