IQueryable Select返回0条记录

时间:2011-03-15 17:50:32

标签: c# silverlight linq ria iqueryable

您好我对Silverlight和C#不熟悉并且有一个利用RIA技术使用数据的程序。我在从数据源中选择单个列时遇到问题。我正在尝试使用该列的值来填充图表中的单个系列。

在我的UI上,我有一个网格和一个条形图。 我可以使用:

填充我的网格
DomainContext ctx = new DomainContext();
ListingGrid.ItemsSource = ctx.v_IQ_Flashes;
ctx.Load(ctx.Get_Table1());

用我的表Table1

中的所有(*)字段填充我的数据网格

现在我想在我的图表上只使用该图表中的一列填充单个系列。 使用以下代码生成返回值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 。

3 个答案:

答案 0 :(得分:1)

在我看来,你实际上并没有从你的Where条款中得到任何东西。

删除where子句会导致它工作吗,所以我会评估它并确定为什么它不匹配任何记录。

答案 1 :(得分: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;

答案 2 :(得分:0)

你在哪里添加sum_slot的代码? 如果你在加载时这样做,零结果是正确的,因为ctx.Load(ctx.Get_Table1())是异步操作,如果接下来你的步骤是过滤器,则数据尚未加载。

我认为,第一种使这段代码正确的方法 - 为回调添加过滤器

ctx.Load(ctx.Get_Table1(),()=> {// get sum_slot},null);

第二种方式 - 将过滤器应用于查询:

ctx.Load(ctx.Get_Table1()。Where(e => e.Year == t_year)) - 上下文将加载过滤的项目。

相关问题