Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог IN из SQL для разных коллекций, Аналог IN из SQL для разных коллекций 
:(
    Опции темы
EASports
Дата 10.1.2016, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Всем привет!
Странно, но что-то у меня не получается нагуглить ничего по этому поводу, применительно для меня. Либо я туплю и все настолько элементарно, что никто даже не спрашивал на форумах, либо все делают как-то по другому. На самом деле я нашел способ, но мне он не нравится. Скажем так, он не изящный. 
Собственно суть.
Есть 3 класса, пусть они будут такие:

Код

class Users
{
public int id;
public string name;
}

class Roles
{
public int id;
public string name;
}

// связь многие-ко-многим этих таблиц
class UsersRoles
{
public int id;
public int userid;
public int roleid;
}


Предположим таблицы наполнены некими данными. Требуется выполнить запрос следующего плана (пишу свой способ реализации, как и говорил, надеюсь, кто-то знает более изящный):
Код

 List<Users> userlist = db.Users.SqlQuery("SELECT * FROM Users WHERE Users.id IN (SELECT [Users-Roles].userid FROM [Users-Roles] WHERE [Users-Roles].roleid = {0})", 5).ToList();

То есть мне нужно получить всех пользователей из таблицы Users с определенной ролью.
У меня в базе запрос к другим таблицам и данным, но суть та же самая.
PM MAIL   Вверх
chupachups
Дата 11.1.2016, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 15.10.2008

Репутация: нет
Всего: 1



Так требуется выполнить запрос к таблицам SQL или все же к коллекциям объектов на C#?
В первом случае ничего элементарнее IN не придумали, можно через INNER JOIN
Во втором случае смотри MSDN

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
EASports
Дата 16.1.2016, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Уже решил. Все намного проще оказалось.

int roleid = 1;
var users = from u in Users join ur in UsersRoles on u.id = ur.userid where ur.roleid == roleid select u;

Вроде в синтаксисе не ошибся. В редакторе не проверял. Исправляйте, если накосячил. 
Возможно кому-то поможет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0969 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.