2017-07-12 58 views
1

在我的項目中,我需要返回與數組中提供的模型Id'不匹配的汽車數據列表。我不確定我會如何去讓我的查詢工作。到目前爲止,我有以下以下幾點:在列表中存在使用Lambda表達式的查詢

var IdList = new List<int> { 60,61,62, 63, 64, 65 }; 
var query = Context.ManufacturersTable.Where(m => m.Date == date && m.CountryToship = country && m.ExportOnly == false); 
if(query.Count() > 0) 
    query = query.Where(x => x.CarMoreInfoTable.CarModelTable.Where(f => IdList.Contains(f.ModelId))) //Cannot convert lambda expression to intended delegate type error here 

return query 

正如你可以在上面的查詢看,我有3個表都相互關聯。但請能指導我如何查詢所有不包含給定數組中Id的數據?

謝謝

+0

嘗試用'query.Where(X => x.CarMoreInfoTable.CarModelTable.Any(F =>!IdList.Contains(f.ModelId)))',爭用的使用點內'凡( )' – Satpal

+2

如果我正確地理解了這個,你可以做'f =>!IdList.Contains(f.ModelId)'? –

+0

僅僅注意到你在註釋結尾處的註釋中放置了一條錯誤消息。可能會更好地把這個信息放在帖子的主體中,這樣可以看到沒有滾動條。 –

回答

2

你有一個錯誤,因爲第二個「位置」是這裏的問題,首先希望在哪裏委託方法的返回布爾而不是IEnumerable的。 (註釋編輯)我認爲你必須否定:

IdList.Contains(f.ModelId)

編輯

如果您需要租車的數據(我會認爲這是CarModel類中),那麼你需要改變第一次在哪裏到SelectMany(我們想將許多集合合併爲一個)並且否定內部表達式(包含)。

var result = query 
.SelectMany(x => x.CarMoreInfoTable.CarModelTable 
        .Where(f => !IdList.Contains(f.ModelId))).ToList(); 
+0

不會忽略所有'CarModelTable'項目,即使它們中只有一個在'IdList'中 –

+1

@DaveBecker我編輯了我的答案 – miszczak