Каково различие между использованием, Участвуют в Linq и “Стиле Olde” пред синтаксис соединения ANSI?

byte[] strToByteArray(string str)
{
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    return enc.GetBytes(str);
}
6
задан Community 23 May 2017 в 12:32
поделиться

1 ответ

Ни один из приведенных выше запросов не является полностью «правильным». В EF обычно правильно использовать свойства отношения вместо любого из вышеперечисленных. Например, если у вас есть объект Person с отношением «один ко многим» к PhoneNumbers в свойстве под названием Person.PhoneNumbers, вы можете написать:

var q = from p in Context.Person
        from pn in p.PhoneNumbers
        select pn;

EF построит соединение за вас.

В терминах вопроса выше , причина, по которой сгенерированный SQL отличается, заключается в том, что деревья выражений разные, даже если они дают эквивалентные результаты. Деревья выражений сопоставляются с SQL, и вы, конечно, знаете, что можете писать другой SQL, который дает те же результаты, но с другой производительностью. Отображение предназначено для создания приличного SQL, когда вы пишете весьма «обычный» EF-запрос.

Но отображение не настолько умно, чтобы брать очень нетрадиционный запрос и оптимизировать его. В первом запросе вы указываете, что объекты должны быть эквивалентными. Во втором вы заявляете, что свойство ID должно быть эквивалентным. В моем примере запроса выше говорится: «Просто получите подробности для этой одной записи». EF, в основном, разработан так, как я показываю, но также хорошо справляется со скалярной эквивалентностью.

4
ответ дан 17 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: