C# - Сравнение списка <t>со списком динамических c - PullRequest
0 голосов
/ 23 января 2020

У меня есть динамический c список

            var myNames = new List<dynamic>();

На основе некоторых условий при переборе моей коллекции я добавляю 2 столбца Имя и Адрес в список динамических c вместе с некоторыми данными

            myNames.Add(new
                    {
                        Name = MyCollection[i].<someName>,
                        Address = MyCollection[i].<someAddress>
                    });

Теперь у меня есть обобщенный список c с именем dbNames, который содержит список имен, извлеченных из базы данных. Мое требование - перебирать dbNames 5 раз. Получите первое (вхождение a) имя, которое существует в dbNames, но не в myNames, и добавьте его в myNames.

На самом деле я не могу понять, как запросить коллекцию, чтобы получить список имен, которые существуют в dbNames, но отсутствуют в myNames. Я попробовал ниже

someName = dbNames.Where(d => !((IEnumerable<dynamic>)myNames.Contains(b=> d== (string)b.Name)).FirstOrDefault();

Я получаю сообщение об ошибке: «Невозможно преобразовать лямда-выражение в тип dynamici c и не может его преодолеть, несмотря на попытки другими способами.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Метод Contains () просто не принимает лямбда-выражения, об этом говорит ошибка.

Вместо этого можно использовать Any () и опустить выражение Where ():

someName = dbNames.FirstOrDefault(dbName => !(myNames.Any(b => dbName == b.Name));
1 голос
/ 23 января 2020

попробуйте что-то вроде,

var x=dbNames.Where(p=>!myNames.Select(q=>q.Name).Contains(p)).ToList().Distinct().Take(5);

Добавьте эти имена в Dynami c список myNames так, как вы хотите.

Полный код:

public static void Main()
    {
        List<string> names=new List<string>{"A","xxx","B","C","D","yyy","E","F"};
        List<dynamic> dyn=new List<dynamic>();
        dynamic person = new ExpandoObject();
        person.Name="xxx";
        person.Address="ADD";
        dynamic person1 = new ExpandoObject();
        person1.Name="yyy";
        person1.Address="ADD";
        dyn.Add(person);
        dyn.Add(person1);

        var x=names.Where(p=>!dyn.Select(q=>q.Name).Contains(p)).ToList().Distinct().Take(5);
        foreach(var n in x)
        {
            Console.WriteLine(n);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...