开发者

LINQ understading Non-Equijoins

开发者 https://www.devze.com 2023-02-15 20:15 出处:网络
I use asp.net 4, ef 4 and c#, LINQ and Non-Equijoins. Here below I wrote two examples of Non-Equijoins.

I use asp.net 4, ef 4 and c#, LINQ and Non-Equijoins.

Here below I wrote two examples of Non-Equijoins. Both are working fine in my model.

Because I'm pretty new to Linq, I would like ask you:

  • Which syntax typology would you advice me to adopt in my code?
  • Which code performance faster?

Thanks for your help:

Here some useful links:

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;


I'd prompt for a third option:

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

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

Or alternatively (and equivalently):

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

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

I wouldn't expect the performance to be impacted - I'd expect all of these to end up with the same SQL.


I like the first query syntax (it is better readable for me but this part of question is subjective) and I think the perforamance will be the same because queries are actually the same. let keyword just stores subexpression to variable but generated SQL query should be the "same".

0

精彩评论

暂无评论...
验证码 换一张
取 消