2013-10-28 60 views
2

我有這樣實體框架等同於NOT IN

SELECT id 
FROM params 
WHERE valid=1 
    AND id NOT IN (SELECT pid 
        FROM clientparams 
        WHERE update = 0 AND client=15) 
LIMIT 25 

查詢我試圖將其轉換爲實體框架相當於:

IQueryable<Params> parame = db.Params.Where(p => p.valid.Equals(1)).Except(....); 

但我被困在那裏我需要點爲子查詢做一個等價物

任何想法如何解決它?

+1

試着看一下這個問題: 「實體框架 - LINQ的NOT IN查詢」 http://stackoverflow.com/questions/15657086/entity-framework-linq-not-in-query – Humanier

+1

就像'.Where(p =>!clientparams.Select(cp => cp.pid).Contains(p.Id))'? – millimoose

+0

@Humanier:在我發佈之前,我嘗試着看它,但我很困惑,因爲它使用了不同的編碼方式,而且我沒有設法使它工作。 – user2929006

回答

2

試試這個

IQueryable<Params> parame = db.Params.Where(p => p.valid.Equals(1) && 
    !db.clientParams.Any(e => e.pid == p.id && e.update == 0 && e.client == 15)) 
            .OrderBy(e => e.id) //Order by any field. 
            .Take(25); 
+0

非常感謝,它的工作:)偉大 – user2929006