byte[] strToByteArray(string str)
{
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
return enc.GetBytes(str);
}
Ни один из приведенных выше запросов не является полностью «правильным». В 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, в основном, разработан так, как я показываю, но также хорошо справляется со скалярной эквивалентностью.