2013-06-20 108 views
2

我正在建立一個where-condition-string從用戶輸入動態地查詢一個ObjectSet。LINQ聚合在哪裏字符串

所以我有這樣的:

// Filter name 
whereConditions.Add("[email protected]"); 
parameters.Add(new ObjectParameter("Name", model.Name)); 
// Filter Bonuspoints 
whereConditions.Add("[email protected]"); 
parameters.Add(new ObjectParameter("BonusPoints", model.BonusPoints)); 
// Query 
db.persons.Where(whereConditions, parameters.ToArray()); 

這對相關對象,你可以在上面看到,甚至完美的作品。

但不知何故,我無法使用聚合。這是行不通的:

whereConditions.Add("it.CustomerSaleFigures.Sum(x=>x.Turnover)>@Turnover"); 
parameters.Add(new ObjectParameter("Turnover", model.Turnover)); 

我錯過了什麼嗎? 任何幫助表示讚賞!

+0

是什麼類型的人? –

+0

它是ObjectSet類型其中T是EntityTypes – Travis

+0

您是否正在查詢數據庫是否在內存中加載了需要的記錄?不是每個linq語句都可以轉換成適當的sql。你遇到了什麼錯誤? – Sam

回答

0

ObjectQuery使用的字符串條件是實體SQL,而不是C#Linq。

whereConditions.Add(@" 
    Sum(
     SELECT Turnover 
     FROM NAVIGATE(it.CustomerSaleFigures) 
    ) > @Turnover"); 

parameters.Add(new ObjectParameter("Turnover", model.Turnover)); 

(我不知道是否需要NAVIGATE()

或者,您可以使用Linq:

IQueryable<Person> query = db.persons; 
query = query.Where(c => c.Name == model.Name); 
query = query.Where(c => c.CustomerBonusPoint.BonusPoints == model.BonusPoints); 
query = query.Where(c => c.CustomerSaleFigures.Sum(sf => sf.Turnover) > model.Turnover); 

return query.ToList(); 
+0

你試過這個嗎?無法讓它工作。 (SELECT SUM(f.Turnover)FROM it.CustomerSaleFigures as f)> @Turnover儘可能地靠近我。它返回錯誤:參數類型'Transient.collection [Transient.rowtype [(_ ## groupAggSum4,Edm.Decimal(Nullable = True,DefaultValue =,Precision =,Scale =))](Nullable = True,DefaultValue =) ]'和'Edm.Decimal'對於此操作不兼容。 – Travis