2011-03-15 91 views
1

您好,我是Silverlight和C#的新手,並且有一個使用RIA的使用數據技術的程序。我在從數據源中選擇單個列時遇到問題。我正在嘗試使用該列的值來填充圖表中的單個系列。IQueryable Select返回0條記錄

在我的用戶界面我有一個網格和條形圖。 我能填充我的網格使用:

DomainContext ctx = new DomainContext(); 
ListingGrid.ItemsSource = ctx.v_IQ_Flashes; 
ctx.Load(ctx.Get_Table1()); 

用於填充我的DataGrid從我的表table1所有(*)領域

現在我想填充一個系列我的圖表上只有一個該圖表中的列。 使用以下代碼yeilds返回值爲0(這是不正確的)。我究竟做錯了什麼?

var slot = ctx.v_IQ_Flashes.Where(e => e.Year == t_year).Select(e => e.Win); 
var sum_ret_slot = slot.Sum(); 
decimal sum_slot = sum_ret_slot.Value; 

請注意,所有值(Slotsum_ret_slotsum_slot)均爲0我使用的調試,以確認這些確實是被稱爲和它們的值都爲0。

+1

是否刪除篩選器('Where)導致...結果? – 2011-03-15 17:56:28

回答

1

這似乎我說你實際上沒有從你的Where條款中得到任何東西。

是否刪除where子句導致它工作,它所以我會評估,並確定爲什麼不匹配任何記錄。

+0

感謝您的迴應! 不幸的是刪除where子句產生了相同的結果(0): 我還包括以下內容: 使用BusinessApplication.Web.Services; 使用BusinessApplication.Models;使用System.Linq的 ; – James 2011-03-15 18:03:38

+0

@詹姆斯然後你實際上沒有得到任何東西。 hrmm – msarchet 2011-03-15 18:05:16

+0

是非常奇怪的。我使用相同的確切表來填充數據網格,並使用超過500條記錄進行填充。林不知道該怎麼做。 – James 2011-03-15 18:28:25

0

我同意msarchet - 檢查您的t_year變量的值 - 是否有任何行匹配您的Where謂詞?

你得到的結果,如果你改變了代碼:如果您更改代碼

var slot = ctx.v_IQ_Flashes.Select(e => e.Win); 
var sum_ret_slot = slot.Sum(); 
decimal sum_slot = sum_ret_slot.Value; 

或者你得到的結果:

var slot = ctx.v_IQ_Flashes.Where(e => e.Year == 2010).Select(e => e.Win); 
var sum_ret_slot = slot.Sum(); 
decimal sum_slot = sum_ret_slot.Value; 
+0

在這兩種情況下,我都得到0個結果。也許我錯誤地調用了這個? 此代碼位於我的revenue_class.cs文件中。 我有main.xaml main.xaml.cs和rev.cs 至少有一個好消息,我正確地做了LINQ,但可能是我對整個環境缺乏瞭解。 – James 2011-03-15 19:52:29

+0

聽起來也許這行 - 'ctx.Load(ctx.Get_Table1());' - 是相當重要的! – Stuart 2011-03-15 19:58:10

0

你在哪裏添加sum_slot獲取代碼? 如果你這樣做是因爲加載,零結果是正確的原因ctx.Load(ctx.Get_Table1())是異步操作,如果下一步你的過濾器,數據尚未加載。

我認爲,以使此代碼正確的第一種方式 - 添加過濾器回調

ctx.Load(ctx.Get_Table1(),()=> {//獲取sum_slot},NULL);

方式二 - 將過濾器應用於查詢:

ctx.Load(ctx.Get_Table1()式(E => e.Year == t_year)) - 上下文將加載過濾項。

+0

感謝所有的幫助,我真的很感激它,請記住我的無知。我試圖讓總和沒有其他目的,而不是隻有1條記錄。 我創建了一個名爲'test'的新表,它只有1條記錄,所以我不用這筆錢。 但是,嘗試你的第二種方法,我如何將該值分配給變量?我試過var test_var = ctx.Load(ctx.GetTest_tblQuery()。其中​​(e => e.ID> 0).Select(e => e.test)); 但我得到一個錯誤: 不能隱式轉換類型'int?'到'BusinessApplication.Web.test_tbl' – James 2011-03-15 20:57:07

+0

在這種情況下,請嘗試ctx.Load(ctx.GetTest_tblQuery()。FirstOrDefault(e => e.ID> 0))。域服務方法GetTest_tbl()必須返回IQueryable 2011-03-15 21:18:13