C# LINQ leftjoin удалить неверную записьC#

Место общения программистов C#
Ответить
Anonymous
 C# LINQ leftjoin удалить неверную запись

Сообщение Anonymous »

У меня есть 2 таблицы данных:
PreviousDayData:

Код: Выделить всё

ID  Account  IsEmail  EmailAddress
--------------------------------------------
1   1111     N        abc1Invalid@gmail.com  // Invalid email
2   1112     Y        abc2@gmail.com         // Valid email
3   1113     Y        abc3@gmail.com         // Valid email
CurrentDayData:

Код: Выделить всё

ID  Account  IsEmail  EmailAddress
--------------------------------------------
1   1111     Y        abc1Changed@gmail.com  // Valid email value changed
2   1112     Y        abc2@gmail.com         // Valid email
3   1113     Y        abc3Changed@gmail.com  // Valid email value changed
4   1114     N        NULL                   // Invalid email
Я выполняю левое соединение CurrentDay с предыдущим.
Условия:
  • Идентификатор и учетная запись текущего дня должны совпадать с идентификатором и учетной записью предыдущего дня
  • Значение «IsEmail» ИЛИ «EmailAddress» изменилось с НазадДень
Этот запрос возвращает данные результата:

Код: Выделить всё

ID  Account  IsEmail  EmailAddress
-------------------------------------------
1   1111     Y        abc1Changed@gmail.com  // Valid email
3   1113     Y        abc3Changed@gmail.com  // Valid email
4   1114     N        NULL                   // Invalid email
Запрос:

Код: Выделить всё

var ResultData = (from rowCurrent in currentDay.AsEnumerable()
join rowPrevious in previousDay.AsEnumerable()
on new { ID = rowCurrent.Field("ID"), Account = rowCurrent.Field("Account") }
equals new { ID = rowPrevious .Field("ID"), Account = rowPrevious .Field("Account") }
into rowRight
from rowJoin in rowRight.DefaultIfEmpty()
where
(rowCurrent.Field("IsEmail") != rowJoin?.Field("IsEmail")) ||
(rowCurrent.Field("EmailAddress") != rowJoin?.Field("EmailAddress"))
select new ResultData
{
ID = rowCurrent.Field("ID"),
Account = rowCurrent.Field("Account"),
IsEmail = rowCurrent.Field("IsEmail"),
EmailAddress = rowCurrent.Field("EmailAddress")
}
).ToList();
Вопрос: Как удалить из результата только новую запись в CurrentDay, если она недействительна?

Код: Выделить всё

ID  Account  IsEmail  EmailAddress
-----------------------------------
4   1114     N        NULL                   // Invalid email
Если в CurrentDay есть новая запись, которой нет в previousDay, мне нужно проверить «IsEmail» != «Y» ИЛИ «EmailAddress» не является допустимым адресом электронной почты, то я не хочу включать его в результат.
Примечание. У меня есть вспомогательный метод для проверки строки действительного адреса электронной почты.

Подробнее здесь: https://stackoverflow.com/questions/747 ... lid-record
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»