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
Код: Выделить всё
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
Условия:
- Идентификатор и учетная запись текущего дня должны совпадать с идентификатором и учетной записью предыдущего дня
- Значение «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();
Код: Выделить всё
ID Account IsEmail EmailAddress
-----------------------------------
4 1114 N NULL // Invalid email
Примечание. У меня есть вспомогательный метод для проверки строки действительного адреса электронной почты.
Подробнее здесь: https://stackoverflow.com/questions/747 ... lid-record
Мобильная версия