在 Silverlight 的域服务中使用 Linq
Posted
技术标签:
【中文标题】在 Silverlight 的域服务中使用 Linq【英文标题】:Using Linq in domain service in Silverlight 【发布时间】:2015-02-09 10:36:45 【问题描述】:问这个问题我有点内疚,因为之前问过一个类似的问题,但我没有得到明确的答案。我正在构建一个 silverlight 程序,我需要在域服务中创建一个 Linq 查询(使用 wcf ria)。我需要计算总和这里是我的代码
int lola = (from c in context.GetTRANSACTIONSQuery()
where ((c.CHART_ACC == transStudID) && (c.sch_year == 13))
select c).Sum();
MessageBox.Show(lola.ToString());
在Sum()
的括号之间我收到一个错误提示
错误 1 实例参数:无法从“System.ServiceModel.DomainServices.Client.EntityQuery”转换为“System.Collections.Generic.IEnumerable”
我错过了什么?我知道这是语法问题,因为我是 Linq 的新手。请多谢!
【问题讨论】:
究竟什么是“GetTRANSACTIONSQuery”?你能至少张贴它的签名吗? 我觉得你需要像.Query.Sum()
一样加.Query
。
这是来自域服务模型public IQueryable<TRANSACTION> GetTRANSACTIONS() return this.ObjectContext.TRANSACTIONS;
@KirkWoll 是的尝试了同样的错误
@IMAK,从语法上讲不可能它实际上是 same 错误——.Query
将返回 IQueryable
的实例,它是 IEnumerable
的子类型和当然不是EntityQuery
的实例,因此不会尝试将该类型转换为IEnumerable
。
【参考方案1】:
你为 Sum() 加了什么?你可以试试:
int lola = (from c in context.GetTRANSACTIONSQuery()
where ((c.CHART_ACC == transStudID) && (c.sch_year == 13))
select c.PROPERTYTHATYOUWANTTOADDUP).Sum();
或者您可能想计算有多少项目与您的查询匹配?
int lola = (from c in context.GetTRANSACTIONSQuery()
where ((c.CHART_ACC == transStudID) && (c.sch_year == 13))
select c).Count();
编辑:
既然你想加起来 AMOUNT 属性:
decimal lola = (from c in context.GetTRANSACTIONSQuery()
where ((c.CHART_ACC == transStudID) && (c.sch_year == 13))
select (decimal)c.AMOUNT).Sum();
您还可以确保 c.AMOUNT 永远不会为空,这样您以后就不会遇到错误:
decimal lola = (from c in context.GetTRANSACTIONSQuery()
where ((c.CHART_ACC == transStudID) && (c.sch_year == 13) && (c.AMOUNT != null))
select (decimal)c.AMOUNT).Sum();
【讨论】:
我添加了c.AMOUNT
,然后我收到了这个错误Error 1 Cannot implicitly convert type 'decimal?' to 'Global4.Web.TRANSACTION'
所以我也把int lola
改成了decimal lola
还是一样的错误
也就是说 c.AMOUNT 是小数类型?并且您将其转换为 TRANSACTION 模型。你的LINQ现在不同了吗?似乎它不会使用您的代码返回该错误。你必须明确地转换小数?十进制,也是。它们并不完全相同
如果我的“LINQ 不同”是什么意思?
不,还是一样...就像我说的,除了我在 cmets 开头写的内容外,我没有做任何更改。如果您熟悉 TeamViewer,那么欢迎您自己查看(如果您愿意并且有时间的话)。以上是关于在 Silverlight 的域服务中使用 Linq的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight 启用 WCF 服务、Web 服务、ADO.NET 数据服务