Linq To Entity - также фильтр реляционный - PullRequest
0 голосов
/ 07 июня 2011

У меня есть 2 таблицы. Таблица 1 и Таблица 2. Они имеют отношение один ко многим. Я пытаюсь сделать запрос, как показано ниже. Работает нормально с поиском результата. Я имею в виду, если он не может найти какой-либо результат в соответствии с параметрами, я получил нулевое значение, как обычно. Однако он все результаты таблицы 2 все время показывает в классе таблицы 1, и я хочу получить только результаты таблицы 2 согласно запросу.

dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1 
                           && t1.Table2s.Any(t2 => t2.SearchField2 == param2 
                                          && t2.SearchField3 == param3));

1 Ответ

0 голосов
/ 07 июня 2011

ОБНОВЛЕНИЕ @ 6/8/2011 Можете ли вы попробовать это, чтобы получить отфильтрованные таблицы 2 в таблице 1

var result = from  t1 in Table1s
             where t1.key == t2.key && t1.SearchField1 == param1
             select new Table1s //creating new Table1s Object with Filtered Table2s values
                    {
                        key = t1.key,
                        SearchField1 = t1.SearchField1
                        //set all other Table1s propeties from t1
                        ...
                        Table2s = t1.Table2s.Where( x=> x.SearchField2 == param2 && x.SearchField3 == param3)
                    };


-----------------------------------------------------------------

Поскольку вы проверяете «Любой», вы просто получаете объект таблицы 1, который соответствует вашему условию,Table1s.Table2s дает вам все связанные записи.Вам нужно снова отфильтровать его

dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1 
                           && t1.Table2s.Any(t2 => t2.SearchField2 == param2 
                                          && t2.SearchField3 == param3));

, в то время как вам нужно выбрать Table2s для Table1 в соответствии с вашим условием поиска,

var table2s = table1.Table2s.Where(t2 => t2.SearchField2 == param2 && t2.SearchField3 == param3);

, если вам непосредственно нужны Table2s, вы можете сделать:

var result = from t1 in Table1s
             from t2 in Table2s
             where t1.key == t2.key && t1.SearchField1 == param1
                                    && t2.SearchField2 == param2 
                                    && t2.SearchField3 == param3
             select t2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...