2014-04-04 31 views
0

我怎樣才能改變這個請求:LINQ查詢用WHERE條件 - 計算項目

query = query.Where(item => (from table in context.Table 
          where table.amount == item.Amount 
          select table).Count() >= 10); 

不使用子查詢(from ... in ...)

我試圖單獨創建子查詢,與使用它的Where條件:

VAR子查詢=從表中選擇context.Table table.amount;

VAR列表= subQuery.ToList()

但我不知道我怎麼能以後使用它,因爲.Count()操作。

謝謝您的意見。

+1

什麼是在第一個語句中的查詢? – Habib

+0

@Habib:我假設你試圖瞭解這是否是Linq的對象,SQL等? – Chris

+0

我不確定Count(),但其他Linq方法需要一個表達式,所以你可以做query.Where(item => context.Table.Count(a => a.amount == item.Amount); –

回答

2

如何:

query = query.Where(item => context.Table 
            .Count(t => t.amount == item.Amount) >= 10); 

或者減少往返次數:

var counts = context.Table 
        .GroupBy(t => t.amount) 
        .Select(g => new {amount = g.Key, count = g.Count()}); 

query = from q in query 
     join c in counts 
     on q.amount equals c.amount 
     where c.count >= 10 
     select q; 
+0

是不是仍然使用子查詢?事實上不是完全一樣的原始除了使用方法的語法,而不是查詢語法(或任何其他人被稱爲)? – Chris

+0

我想你將不得不使用'上q.Amount等於c.amount'爲加入 – sloth

0

只要使用Count直接斷言:

query.Where(item => context.Table.Count(table.amount == item.Amount) >= 10); 
+0

是不是使用子查詢仍然?實際上是不是完全一樣的原來除了使用方法的語法,而不是查詢語法(或任何其他人被稱爲)? – Chris

0

這個什麼一個

var subQuery = (from table in context.Table select table.amount).ToList(); 

query = query.Where(item => subQuery.Count() >= 10); 
+0

爲什麼下降投票我已經格式化了我的代碼 –

+1

仍然是錯誤的。您只需檢查'context.Table'中是否有超過10個元素,用於'query'中的每個元素。所以你要麼在'query'中獲得所有元素,要麼沒有。 – sloth