在 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 中基于任务的数据服务

Silverlight 服务器端数据分页使用 REST?

Silverlight 启用 WCF 服务、Web 服务、ADO.NET 数据服务

silverlight 应用程序不能使用 wcf 命名空间

使用 Silverlight 5、IIS 7.5 对 WCF 服务进行 Windows 身份验证

Silverlight 应用程序的 Azure WorkerRole 中的 WCF 服务