开发者

SQL to LINQ Expression

开发者 https://www.devze.com 2023-03-18 02:51 出处:网络
I have specific SQL expression : { 开发者_运维问答select * from courceMCPD.dbo.Contact c where c.cID in ( select cId from courceMCPD.dbo.Friend f where f.cId=5)

I have specific SQL expression :

{
开发者_运维问答select * from courceMCPD.dbo.Contact c 
where c.cID in ( select cId from courceMCPD.dbo.Friend f where f.cId=5)
}

i would like to get LINQ expression that gets the same result.

thank you in advance.


That sounds like it's equivalent to something like:

var friendIds = from friend in db.Friends
                where friend.ContactId == 5
                select friend.ContactId;

var query = from contact in db.Contacts
            where friendIds.Contains(contact.Id)
            select contact;

(There are lots of different ways of representing the query, but that's the simplest one I could think of.)

It's pretty odd to perform a join on a particular field and also mandate that that field has to have a particular value though... there's not very much difference between that and:

var query = db.Contacts.Where(c => c.Id == 5);

... the only difference is whether there are any friend entries for that particular contact.

EDIT: Smudge gave another option for the query in a comment, so I'm promoting it into this answer...

var query = db.Contacts.Where(c => c.Friends.Any(f => f.cId == 5))

This assumes you've got an appropriate Friends relationship defined in the Contacts entity.


Using labda expressions:

var query = dc.Contact
        .Where(c => dc.Friend.Select(f => f.cId).Contains(i.cID))
        .Where(c => c.cId == 5);

User "query" syntax:

var query = from c in dc.Contact
            where (from f in dc.Friend select f.cID).Contains(c.cId)
            where c.cId == 5
            select c;


You haven't specified VB/C# so I'm going for VB =P

        Dim results As IEnumerable(Of yourEntities.Contact) = 
        (From c In yourContextInstance.Contacts Where (From f In yourContextInstance.Friends 
                                                       Where f.cId = 5 Select f.cId).Contains(c.cID))

Clearly, Jon's answer works, this query (I believe) just resembles your T-SQL Closer.

0

精彩评论

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