Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1

LINQ. пытаюсь составить запрос.

22.04.2010, 01:10. Показов 1051. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеется класс, одним из свойств которого является массив примитивов. например:

C#
1
2
3
4
5
6
7
public class ClassA {
   private int [] _numbers;
   public int numbers {
       get () { return _numbers; }
       set () { _numbers = value; }
   }
}
и имеется массив объектов этого класса. например:

C#
1
ClassA [] classes;
допустим, массив уже создан и что-то содержит. нам нужно отобрать в другой массив только те элементы, в массивах-свойствах "numbers" которых содержится хотя бы один из заданного массива целых.

помогите запрос составить:

C#
1
2
3
4
5
6
7
8
9
ClassA [] classes = ...;
...
public ClassA[] getClasses (int [] array) {
  ClassA[] res_arr = from n 
                           in classes 
                           where ??? "хотя бы один из элемент из array содержится в n.numbers ??? 
                           select n) as ClassA[];// or similar
  return res_arr;
}
спасибо заранее!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2010, 01:10
Ответы с готовыми решениями:

Не удается составить LINQ запрос EF
Здравствуйте! Изучаю EntityFramework простые запросы к таблицам MS SQL пишу без проблем, загвозка в более сложных. Вот у меня есть ПО (по...

Linq Запрос
есть запрос var query3 = from AddreClient in tabAddreClient.AsEnumerable() join...

Запрос с LinQ
Добрый день, есть нужда сделать запрос в БД с помощью LinQ. Обычные запросы работают на ура, но что делать со следующей ситуацией? ...

4
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
22.04.2010, 09:27
Цитата Сообщение от novi4ok Посмотреть сообщение
те элементы, в массивах-свойствах "numbers" которых содержится хотя бы один из заданного массива целых
Не понял
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.04.2010, 10:17  [ТС]
Цитата Сообщение от kirill29 Посмотреть сообщение
Не понял
например,

C#
1
2
3
4
5
6
7
8
9
10
ClassA [] classes = new ClassA[3]();
ClassA cl = new ClassA();
cl.numbers = new int[] {0,1,2,3};
classes [0] = cl;
cl.numbers = new int[] {2,3,4,110};
classes [1] = cl;
cl.numbers = new int[] {4,5,6};
classes [2] = cl;
 
int [] array = new int[] {10,4,33,110,333};
в результате запроса нужно получить новый массив, содержащий только объекты classes[1] и classes[2], потому что у classes[0] нет ни одного элемента в numbers, который имеется также и в array. (у первых двух: classes[1] - 4 и 110, classes[2] - 4).


PS. разве LINQ онтосится скорее к базам данных? это разве не часть .NET- языков? даже по названию: Language INtegrated Query - запрос, интегрировнный в язык? я сомневаюсь, что тема была перемещена правильно. но модераторам, конечно, виднее. может здесь действительно скорее кто-то поможет?
0
146 / 118 / 8
Регистрация: 09.03.2010
Сообщений: 150
22.04.2010, 14:04
novi4ok,
в общем вот как я решил твою задачку - если конечно правильно понял ее весьма затемненную суть.

C#
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
 
    int[] id1 = { 0, 1, 2, 3 };
    int[] id2 = { 2, 3, 4, 110 };
    int[] id3 = { 4, 5, 6 };
//массив с которым сверяемся - есть ли пересечения с ним 
    int[] array = new int[] { 10, 4, 33, 110, 333 };
 
//проверим на пересечение значений array с каждым указанным массивом
    var m1 =
        from s in id1
        where (array.Intersect(id1).Count() != 0) // если пересечений нет - кол-во элементов в возвращенной методом Intersect последовательности будет равно нулю
        select s;   // если условие выполняется - выбираем все элементы данного массива 
 
    var m2 =
       from s in id2
       where (array.Intersect(id2).Count() != 0)
       select s;
 
    var m3 =
     from s in id3
     where (array.Intersect(id3).Count() != 0)
     select s;
 
  // объединяем все полученные  последовательности в одну
    var m4 = new[] {
                  m1.Take(m1.Count()),
                  m2.Take(m2.Count()),
                  m3.Take(m3.Count())}.SelectMany(p => p);
// перечисляем содержимое нового массива
foreach (var id in m4)
{
Console.WriteLine(id);
}


Итоговый массив содержит все числа из id2 и id3 поскольку только с этими массивами есть пересечение у массива array

Как это все объединить в один запрос - пока не придумал. Сам linq только недавно начал изучать.
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.04.2010, 19:35  [ТС]
erlik, спасибо, но это - не совсем то что нужно. как записать твое решение одним запросом - нет проблем. проблема появляется когда мы имеем не массивы id1-id3, а объекты, имеющие массивы как properties. нужно отобрать объекты, properties которых имют пеерсечения с заданным массивом.

Добавлено через 3 часа 20 минут
дошло наконец-то (почему только сейчас? вроде не жираф вовсе. пора на пенсию. в отпуск хотя бы):

C#
1
var query = from ClassA cl in classes where (cl.numbers.Intersect(array).Count() > 0) select cl;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2010, 19:35
Помогаю со студенческими работами здесь

Запрос LINQ
private bool CheckAdmin(string phone) { var AdCheck = smsDataSet.Subscribers.Single(n => n.Phone ==...

Linq Запрос
Имеется таблица со следующими вторичными ключами UserId, SkillId, SkillLevelId. Есть словарь SkillId-SkillLevelId. Как при помощи Linq to...

Запрос к БД используя Linq
Здравствуйте, есть БД с табличкой, в неё столбец Хочу используя Linq cоздать коллекцию обьектов и заполнить их при запросе данными из БД,...

Запрос Linq to DataTable
Здравствуйте, помогите разобраться с одним вопросом: Есть запрос: IEnumerable<DataRow> query = from spell in...

LINQ запрос, ошибка
Делаю так dc = new DataContext(Connection); Table<Profession> Professions = dc.GetTable<Profession>(); Profession p = (from...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru