powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ TO SQL, выборка записей по данным коллекции
15 сообщений из 15, страница 1 из 1
LINQ TO SQL, выборка записей по данным коллекции
    #36014125
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть имеется некая коллекция:


Код: plaintext
1.
2.
3.
var empls = new System.Collections.ArrayList() {
      new { FName = "Иван", LName = "Иванов" },
      new { FName = "Петр", LName = "Петров" },
      new { FName = "Вася", LName = "Васильев" }};

И пусть имеется в базе данных таблица сотрудников. Как выбрать посредством LINQ To SQL сотрудников, имена и фамилии которых представлены в коллекции?

Если бы мы имели коллекцию только имен, то выбрка была простой, например так:


Код: plaintext
1.
var empls = new List<string>() { "Иван", "Петр", "Вася" };
dctx.Employees.Where(c => empls.Contains(c.FName));

Но как быть, если элементы коллекции имеют несколько свойств и отбор нужно вести по их совокупности?
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36014259
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Datar,

С анонимными типами, скорее всего не получится.
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36014292
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Sukhovilin,

Без проблем, могу создать тип:

Код: plaintext
class Person { string FName; string LName }
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36015743
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никто не сталкивался?
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016143
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Datar,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var emps = new List<Person>();
            emps.Add(new Person() { FName = "Иван", LName = "Иванов" });
            emps.Add(new Person() { FName = "Петр", LName = "Петров" });
            emps.Add(new Person() { FName = "Вася", LName = "Васильев" });

            var needs = new List<string>() { "Иван", "Петр", "Вася" };

            var query = from emp in emps
                        where needs.Contains(emp.FName)
                        select emp;

            foreach (var item in query)
                Console.WriteLine(item.FName + " " + item.LName);

...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016152
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Sukhovilin,

OUT:

Иван Иванов

Петр Петров

Вася Васильев
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016357
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry SukhovilinDatar,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var emps = new List<Person>();
            emps.Add(new Person() { FName = "Иван", LName = "Иванов" });
            emps.Add(new Person() { FName = "Петр", LName = "Петров" });
            emps.Add(new Person() { FName = "Вася", LName = "Васильев" });

            var needs = new List<string>() { "Иван", "Петр", "Вася" };

            var query = from emp in emps
                        where needs.Contains(emp.FName)
                        select emp;

            foreach (var item in query)
                Console.WriteLine(item.FName + " " + item.LName);



Мне нужно выбрать не по FName, а по обоим полям: FName и LName. Исходные данные должны быть такими:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
            var emps = new List<Person>();
            emps.Add(new Person() { FName = "Иван", LName = "Иванов", Birth = ... });
            emps.Add(new Person() { FName = "Петр", LName = "Петров", Birth = ... });
...
            emps.Add(new Person() { FName = "Вася", LName = "Васильев", Birth = ... });

            var needs = new List<Person_1>();
            emps.Add(new Person() { FName = "Иван", LName = "Иванов", Birth = ... });
            emps.Add(new Person() { FName = "Вася", LName = "Васильев", Birth = ... });

Нужно получить из emps все элементы для которых в needs есть совпадения по имени и фамилии, но не по дате рождения и прочим полям.
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016368
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Datar,

ну и в чём проблема? where ( condition1 && condition2 )
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016372
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
& один
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016404
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buredDatar,

ну и в чём проблема? where ( condition1 && condition2 )

Работающий код есть?
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016495
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DatarburedDatar,

ну и в чём проблема? where ( condition1 && condition2 )

Работающий код есть?

а самому написать ? ))

только для примера

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
        void go()
        {
            var emps = new List<Person>();
            emps.Add(new Person() { FName = "Иван", LName = "Иванов" });
            emps.Add(new Person() { FName = "Петр", LName = "Петров" });
            emps.Add(new Person() { FName = "Вася", LName = "Васильев" });


            var needs = new List<Person>();
            needs.Add(new Person() { FName = "Иван", LName = "Иванов" });
            needs.Add(new Person() { FName = "!Петр", LName = "Петров" });
            needs.Add(new Person() { FName = "Вася", LName = "Васильев" });

            
            var query = from emp in emps
                        where needs.Contains(emp, emp)
                        select emp;

            foreach (var item in query)
                Console.WriteLine(item.FName + " " + item.LName);
        }

    }

    class Person : IEqualityComparer<Person>
    {
        public string FName; public string LName;

        #region IEqualityComparer<Person> Members

        public bool Equals(Person x, Person y)
        {
            return x.FName == y.FName && x.LName == y.LName;
        }

        public int GetHashCode(Person obj)
        {
            return obj.FName.GetHashCode();
        }

        #endregion
    }

...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016635
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Sukhovilin,

Спасибо, я понял смысл. Правда, этот метод генерит несколько запросов к базе данных.
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016646
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry Sukhovilin,

упс, поспешил. В рантайме вываливается ошибка, что что-то там не имеет преобразования в SQL.

Поигравшись с Contains более основательно я нашел следующее решение:

Код: plaintext
1.
2.
3.
4.
5.
6.
var employees = dctx.Employees.Where(c =>
            needs.Contains(new Person_1()
            {
              FName = c.FName,
              LName = c.LName
            }));

Неудобство в том, что нужно описывать класс Person_1. Если дальше нужно будет искать например по имени и дате рождения, то придется делать новый класс, чтобы подставть в Contains.
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36016697
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DatarburedDatar,

ну и в чём проблема? where ( condition1 && condition2 )

Работающий код есть?
нет блин, я всё придумал
...
Рейтинг: 0 / 0
LINQ TO SQL, выборка записей по данным коллекции
    #36018515
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DatarDmitry Sukhovilin,

Неудобство в том, что нужно описывать класс Person_1. Если дальше нужно будет искать например по имени и дате рождения, то придется делать новый класс, чтобы подставть в Contains.

Думаю, что изначально вы пошли не по тому пути.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ TO SQL, выборка записей по данным коллекции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]