LINQ понимая Non-Equijoins - PullRequest
       12

LINQ понимая Non-Equijoins

0 голосов
/ 10 марта 2011

Я использую asp.net 4, ef 4 и c #, LINQ и Non-Equijoins.

Здесь ниже я написал два примера неравенства. Оба отлично работают в моей модели.

Поскольку я довольно новичок в Linq, я хотел бы спросить вас:

  • Какую синтаксическую типологию вы бы мне посоветовали использовать в моем коде?
  • Какая производительность кода быстрее?

Спасибо за вашу помощь:

Вот несколько полезных ссылок:

http://msdn.microsoft.com/en-us/library/bb882533.aspx

http://msdn.microsoft.com/en-us/library/bb311040.aspx

http://msdn.microsoft.com/en-us/library/bb310804.aspx


// Query sintax
var queryContents = 
    from cnt in context.CmsContents
    let cntA =
        from a in context.CmsContentsAssignedToes
        select a.CmsContent.ContentId
    where cntA.Contains(cnt.ContentId) == false
    select cnt;

// Query method   
var queryContents02 =
    from c in context.CmsContents
    where !(
        from a in context.CmsContentsAssignedToes 
        select a.ContentId).Contains(c.ContentId)
    select c;

Ответы [ 2 ]

4 голосов
/ 10 марта 2011

Я бы попросил третий вариант:

var validContentIds = from a in context.CmsContentsAssignedToes 
                      select a.ContentId;

var queryContents = from cnt in context.CmsContents
                    where !validContentIds.Contains(cnt.ContentId)
                    select cnt;

Или альтернативно (и эквивалентно):

var validIds = context.CmsContentsAssignedToes.Select(a => a.ContentId);

var queryContents = context.CmsContents
                           .Where(cnt => !validIds.Contains(cnt.ContentId));

Я бы не ожидал, что это повлияет на производительность - я 'Я ожидаю, что все они в конечном итоге будут использовать один и тот же SQL.

1 голос
/ 10 марта 2011

Мне нравится синтаксис первого запроса (он лучше читается для меня, но эта часть вопроса субъективна), и я думаю, что производительность будет такой же, потому что запросы на самом деле одинаковы.let Ключевое слово просто хранит подвыражение в переменной, но сгенерированный SQL-запрос должен быть "таким же".

...