kedar001 Ответов: 1

Разница между двумя списками<object> linq


у меня есть два списка клиентского класса
public class Client 
{
    public int ClientID { get; set; }
    public string ClientName { get; set; }
    public string companyName { get; set; }
    public string companyLocation { get; set; }
}


первый список для NewClient
и второе для олдклиента

мне нужно три списка
Недавно добавленные клиенты
Удаленные Клиенты
Общие Клиенты

я попробовал следующий способ, но мне нужен результат по ClientID и названию компании
как я могу добавить еще одно условие, чтобы получить разницу на основе этих двух значений

Я получаю добавленные и удаленные значения
но я не получаю обычных клиентов

Что я уже пробовал:

я попробовал с
List<Client> lstOld_Client = new List<Client>();
           List<Client> lstNew_Client = new List<Client>();


           Client C1 = new Client() { ClientName = "A", ClientID = 1, CompanyLocation = "Pune", CompanyName = "C1" };
           Client C2 = new Client() { ClientName = "A", ClientID = 1, CompanyLocation = "Pune", CompanyName = "C2" };

           lstNew_Client.Add(C1);
           lstNew_Client.Add(C2);

           lstOld_Client.Add(C1);

           var Added = lstNew_Client.Where(a => !lstOld_Client.Any(x => x.ClientID == a.ClientID && x.CompanyName == a.CompanyName)).ToList();
           var deleted = lstOld_Client.Where(a => !lstNew_Client.Any(x => x.ClientID == a.ClientID && x.CompanyName == a.CompanyName)).ToList();

           var commonElements = lstNew_Client.Where(a => lstOld_Client.Any(x => x.ClientID == a.ClientID && x.ClientName == a.ClientName)).ToList();

           var OldTemplete = lstOld_Client.Where(a => commonElements.Any(x => x.ClientID == a.ClientID && x.ClientName == a.ClientName)).FirstOrDefault();
           var NewTemplete = lstNew_Client.Where(a => commonElements.Any(x => x.ClientID == a.ClientID && x.ClientName == a.ClientName)).FirstOrDefault();

George Jonsson

Не должен
commonElements = NewClient.Где(а =&ГТ; oldClient.Любой(х => У Х.Параметр ClientID== а.Параметр ClientID)).Список();
быть
commonElements = CommonClient.Где(а =&ГТ; oldClient.Любой(х => У Х.Параметр ClientID== а.Параметр ClientID)).Список();

Тем не менее, попробуйте
commonElements = CommonClient.Где(а =&ГТ; oldClient.Любой(х => У Х.Параметр ClientID == а.Параметр ClientID и усилитель; & х."название" = = а."название")).Список();
(предполагая, что ваш LINQ работает нормально в противном случае)

kedar001

пожалуйста, проверьте мое обновленное "что я пробовал"

Я получаю правильный результат для добавленных и удаленных ,но не могу получить этот общий результат
я ожидаю, что "С1" будет общим

1 Ответов

Рейтинг:
6

Karthik_Mahalingam

Common = NewClient.Where(n => oldClient.Any(o => o.ClientID == n.ClientID)).ToList();
        Deleted = oldClient.Where(o => !NewClient.Any(n => n.ClientID == o.ClientID)).ToList();
        NewlyAdded = NewClient.Where(n => !oldClient.Any(o => o.ClientID == n.ClientID)).ToList();


kedar001

пожалуйста, проверьте мое обновленное "что я пробовал"

Я получаю правильный результат для добавленных и удаленных ,но не могу получить этот общий результат
я ожидаю, что "С1" будет общим

Karthik_Mahalingam

получение "А" дважды
почему вы проверяете имя клиента и название компании..
ID уникален, не так ли?

kedar001

Нет,это записи для компании, имеющей другого клиента

Karthik_Mahalingam

ладно, ладно. что вы ожидаете в списке commonElements?
в соответствии с запросом и логикой он вернет 2 элемента.

kedar001

Я ожидаю, что "C1" будет общим, так как мы добавили C1 как в старый, так и в новый список

Karthik_Mahalingam

использовать это

var commonElements = lstNew_Client.Where(a =>
lstOld_Client.Any(x =>
x.ClientID == a.ClientID && x.ClientName == a.ClientName && x.CompanyName == a.CompanyName)).ToList();


позаботьтесь о написании свойств в классе

kedar001

пожалуйста, проверьте приведенный ниже код,чтобы получить общие, удаленные и новые значения из списка на основе одного значения свойства.

я получаю правильный результат, если попробую в демо-приложении с тем же значением, но
не в приложении с таким же значением

Common = lstNewData.Где(Н =&ГТ; lstOldData.Любой(о =&ГТ; о'.Метод gettype().Метод Getproperty(Ключи).GetValue(o, null) == n.GetType().GetProperty(KeyField).GetValue(n, null))).Список();

Удалено = lstOldData.Где(о =&ГТ; !lstNewData.Любой(п => п.Метод gettype().Метод Getproperty(Ключи).И getValue(Н нулевое) == о.Метод gettype().Метод Getproperty(Ключи).GetValue(o, null))).Список();

NewlyAdded = lstNewData.Где(Н =&ГТ; !lstOldData.Любой(о =&ГТ; о'.Метод gettype().Метод Getproperty(Ключи).GetValue(o, null) == n.GetType().GetProperty(KeyField).GetValue(n, null))).Список();

Karthik_Mahalingam

извините за поздний ответ,
вопрос решен?

kedar001

спасибо за ответ :)
да, проблема решена


Karthik_Mahalingam

крутой

DJPops

мы можем найти обновленные записи по сравнению с список1 список2 на основе ID

экс.
Список1
Id = 10
Название = "Мумбаи"



Список2
id = 10,
Имя = "Пуна"

результатом должна быть запись Список1

я.е
Id = 10
Название = Мумбай

Это означает, список1 строки значение столбца обновляется

Karthik_Mahalingam

да