2011-03-15 115 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