Разница между lamda где условие и linq где условие? - PullRequest
0 голосов
/ 13 июня 2019

Я работаю с MVC Core с EF-6.x и использую лямбда-выражение, но мой старший сказал мне использовать LINQ почему, потому что при использовании лямбды с предложением where он будет извлекать все данные из базы данных, а затем будетприменять там, где условие.В случае LINQ, если вы используете, где условие будет тянуть только отфильтрованные данные.Пожалуйста, дайте мне знать, что правильно?

Например, Lambda: context.tablename.where(condition);// Should I go with this

LINQ: (from T in tablename where t.(condition));// or this?

Ответы [ 3 ]

1 голос
/ 13 июня 2019

Пожалуйста, дайте мне знать, что правильно?

e.gLambda: context.tablename.where (условие); // Должен ли я пойти с этим

LINQ: (отT в таблице, где t. (Условие)); // или это?

Краткий ответ: это не имеет значения.Поскольку context.tablename в конечном итоге возвращает IQueryable<T>, Entityframework будет не пытаться обратиться к базе данных, пока вы не попытаетесь повторить конечный результат из своего выражения, не говоря уже о .ToArray() и .ToList() каждое,выполняет эту итерацию за вас.

Либо вы использовали синтаксис выражения LINQ (который компилируется как методы LINQ) или методы LINQ, когда вы пытаетесь начать итерацию результатов, Entityframework создает Expression дерево для вас под капотом, которое полностью состоит из вашего запроса (включая Where с, Join с, GroupBy с и т. д.).Поскольку структура LINQ может не точно соответствовать структуре запроса SQL (или любого другого запроса к источнику данных), в зависимости от источника (т. Е. Базы данных, например, SQL Server), Entityframework затем пытается сделать наилучшую возможную оптимизацию для вашего выражения.дерево, чтобы его структура соответствовала исполняемому запросу на источнике (например, запрос SQL Server).Наконец, оно преобразует это дерево выражений в реальный запрос и выполняет его в отношении источника данных и возвращает ваши данные (конечно, после выполнения всех отображений).

Если вы действительно, и я имею в виду ДЕЙСТВИТЕЛЬНО Если вы хотите разобраться в сложностях работы IQueryable движка, я бы предложил пройтись по серии Мэтта Уоррена: ' LINQ: Создание серии поставщиков IQueryable '.Это на самом деле не Entityframework, но она разделяет ту же концепцию.

1 голос
/ 13 июня 2019

Оба синтаксиса будут переведены в один и тот же код IL. Разница в том, будет ли применен фильтр на стороне сервера или клиента, если источником является IQueryable<T> или IEnumerable<T>.

0 голосов
/ 14 июня 2019

мой старший сказал мне использовать LINQ почему, потому что при использовании лямбда с где предложение он будет извлекать все данные из базы данных, а затем он будет применяться где условие.

Ваш старший не прав, вы можете использовать выражение, которое вы предпочитаете, они одинаковы, оба будут фильтровать данные на уровне базы данных. Если вы используете Sql Server в качестве сервера базы данных, вы можете использовать Sql Server Profiler для вывода запросов, выполненных обоими операторами, и вы увидите, что они одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...