Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / linq: not equal / 11 сообщений из 11, страница 1 из 1
07.07.2013, 22:40
    #38323392
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Привет всем!

У меня есть linq запрос:

Код: c#
1.
2.
3.
4.
var query = from q in ddc.ContactPersons
                        join c in ddc.Customers on q.IDCustomer equals c.ID
                        where (q.IDCompany.ToString() == ddlCompany.SelectedValue)
                        select c;



Он работает с точностью до наоборот, т.е. выбирает все IDCustomer из ContactPersons, которые соответствуют ID из Customers.
Скажите, можно ли как-то поменять запрос, чтобы стало NOT EQUALS ?
Или нужно переделывать и нельзя с помощью одного linq запроса такую выборку организовать?
...
Рейтинг: 0 / 0
07.07.2013, 22:54
    #38323402
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Students,

противоречит самой идее join

но решение есть http://stackoverflow.com/questions/3762869/is-there-a-not-equal-in-a-linq-join
...
Рейтинг: 0 / 0
07.07.2013, 22:56
    #38323406
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Код: c#
1.
q.IDCompany.ToString() == ddlCompany.SelectedValue

Если IDCompany имеет целочисленный тип, то это классический образец индусского кода: If(boolValue.ToStiring()=="true")... Интересно, что за запрос к базе сгенерится.

По сабжу: запрос работает ровно так как надо: выбирает все IDCustomer из ContactPersons, которые соответствуют ID из Customers.
Students Или нужно переделывать и нельзя с помощью одного linq запроса такую выборку организовать?Такую это какую? В предыдущих словах нет ответа на этот вопрос.
...
Рейтинг: 0 / 0
07.07.2013, 23:17
    #38323428
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
У меня есть 2 таблицы:
ContactPersons
Customers

В это запросе я выбрал всех Customers, id Которых есть в таблице ContactPersons в поле IDCustomer, причём я выбираю только те строчки ContactPersons в которых поле IDCompany равно какому-то числу.
Это работает. Т.е. выбирает тех людей, которые являются контактными персонами в данной компании.

Теперь нужно наоборот - выбрать всех людей, которые НЕ являются контактными персонами в данной компании.

Тут
http://stackoverflow.com/questions/3762869/is-there-a-not-equal-in-a-linq-join

уже получается на одним запросом. А одним можно?
...
Рейтинг: 0 / 0
07.07.2013, 23:45
    #38323459
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Получается, что только так?
http://stackoverflow.com/questions/3762869/is-there-a-not-equal-in-a-linq-join

Через обычный linq запрос никак не сделать, даже без equal?
...
Рейтинг: 0 / 0
08.07.2013, 01:15
    #38323527
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Сделал как в примере через 2 запроса, тупизм.
Но по другому не знаю как.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var query = from q in ddc.ContactPersons
                        join c in ddc.Customers on q.IDCustomer equals c.ID
                        where (q.IDCompany.ToString() == ddlCompany.SelectedValue)
                        select c;

            List<Customer> cust1 = query.ToList();

            query = from q in ddc.Customers
                    select q;

            List<Customer> cust2 = query.ToList();

            List<Customer> result = cust2.Except(cust1).ToList();

            var query2 = result;
...
Рейтинг: 0 / 0
08.07.2013, 05:23
    #38323567
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Students,

Код: c#
1.
2.
3.
4.
5.
from q in ddc.ContactPersons
join c in ddc.Customers on q.IDCustomer equals c.ID into j1
from j2 in j1.DefaultIfEmpty()
where j2 == null && (q.IDCompany.ToString() == ddlCompany.SelectedValue)
select c;



запрос не тестил, но суть такая — делаете LEFT JOIN (с помощью DefaultIfEmpty()), проверяете где касоемеры == null — это ваши люди.
...
Рейтинг: 0 / 0
08.07.2013, 05:27
    #38323568
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Students,

еще можете использовать метод Contains или Any, получите в результате эффективный EXISTS. в общем, решений море, переживать тут совсем не из-за чего.
...
Рейтинг: 0 / 0
08.07.2013, 14:06
    #38324079
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Students,

а так:
Код: c#
1.
2.
3.
4.
5.
var query = from q in ddc.ContactPersons
            from c in ddc.Customers
            where q.IDCustomer != c.ID
            where (q.IDCompany.ToString() == ddlCompany.SelectedValue)
            select c;

?
...
Рейтинг: 0 / 0
08.07.2013, 14:40
    #38324130
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
Так у меня у самого была идея, но он выбирает больше чем надо, т.е. он выбирает where1 + where2 и людей становится ещё больше.
...
Рейтинг: 0 / 0
12.07.2013, 13:22
    #38329277
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
linq: not equal
StudentsПривет всем!

У меня есть linq запрос:

Код: c#
1.
2.
3.
4.
var query = from q in ddc.ContactPersons
                        join c in ddc.Customers on q.IDCustomer equals c.ID
                        where (q.IDCompany.ToString() == ddlCompany.SelectedValue)
                        select c;



Он работает с точностью до наоборот, т.е. выбирает все IDCustomer из ContactPersons, которые соответствуют ID из Customers.
Скажите, можно ли как-то поменять запрос, чтобы стало NOT EQUALS ?
Или нужно переделывать и нельзя с помощью одного linq запроса такую выборку организовать?
Код: c#
1.
2.
3.
4.
var query = from q in ddc.ContactPersons
                        from c in ddc.Customers 
                        where (q.IDCompany.ToString() == ddlCompany.SelectedValue) && q.IDCustomer!=c.ID
                        select c;
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / linq: not equal / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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