странное поведение в linq to sql, чтобы вернуть все строки без фильтрации - PullRequest
1 голос
/ 20 июня 2011

Я пишу этот код:

Rep_Regions clsr = new Rep_Regions();
Func<Regions, bool> filter = r => r.RegionID == int.Parse(textBox5.Text);
Regions reg = new Regions();
reg = clsr.FindSingle(filter);

и:

 public Regions FindSingle(Func<Regions, bool> exp)
    {
        using (RepositoryDataContext = new DataClasses1DataContext())
        {
            return RepositoryDataContext.Regions.Where(exp).FirstOrDefault();
        }
    }

это запрос, который выполняется на Sql Server:

SELECT [t0].[RegionID], [t0].[RegionDescription]
FROM [dbo].[Region] AS [t0]

Почему запрос не фильтрует результаты и возвращает все строки?

1 Ответ

4 голосов
/ 20 июня 2011

Вы использовали Func<Regions, bool> filter, что заставляет его использовать LINQ-to-Objects после запуска нефильтрованного запроса на сервере.Чтобы использовать состав запроса, вы должны использовать деревья выражений, а не делегаты.

Измените его на:

int regionId= int.Parse(textBox5.Text);
Expression<Func<Regions, bool>> filter = r => r.RegionID == regionId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...