使用crm早期绑定类将linq转换为sql

微妙的

我正在开发基于crm数据库的应用程序。我想使用linq to sql获取salesorder实体下的salesorderdetails数量。

我为此使用子查询。salesorder实体具有new_sefer字段。我的查询是

(from d in context.SalesOrderDetailSet
                where context.SalesOrderSet.Where(s => s.new_Sefer.Id == Id)
                .Select(i => i.SalesOrderId).Contains(d.SalesOrderId.Id)
                select d).Count();

它抛出以下异常。我也有关于子查询的问题

我如何使用linq to sql编写此sql查询

select count(*) from salesorderdetail 
where salesorderId in (select salesorderId from salesorder 
                      where new_sefer = '750FEB6F-F742-E311-8F56-000C29F3049E')  

“无效的'where'条件。实体成员正在调用无效的属性或方法。”

在Microsoft.Xrm.Sdk.Linq.QueryProvider.FindValidEntityExpression(Expression exp)处在Microsoft.Xrm.Sdk.Linq.QueryProvider.FindValidEntityExpression(Expression exp,String operation)在Microsoft.Xrm.Sdk.Linq.QueryProvider.ThrowException(Exception exception) ,字符串的操作)在Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateWhereMethodCall(MethodCallExpression MCE,FilterExpressionWrapper parentFilter,Func键2 getFilter, BinaryExpression parent, Boolean negate) at Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateWhereBoolean(String parameterName, Expression exp, FilterExpressionWrapper parentFilter, Func2用getFilter,列表1 linkLookups, BinaryExpression parent, Boolean negate) at Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateWhere(QueryExpression qe, String parameterName, Expression exp, List1个linkLookups)在Microsoft.Xrm.Sdk.Linq.QueryProvider.GetQueryExpression(表达式表达,布尔&throwIfSequenceIsEmpty,布尔值和throwIfSequenceNotSingle,投影和投影,NavigationSource和源,列表1& linkLookups) at Microsoft.Xrm.Sdk.Linq.QueryProvider.Execute[TElement](Expression expression) at Microsoft.Xrm.Sdk.Linq.QueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.Count[TSource](IQueryable1个源代码)位于C:\ SVN \ Customers \ Burulas \ FlyDBOperations \ FlyDBOperations \ SalesOrderDetailDetailOperations.cs:C:\ SVN \ Customers \ Burulas \ FlyDBOperations \ SalesOrderDetailDetailOperationsSaSelectOrder()中的Xrm.SalesOrderDetailOperations。客户\ Burulas \ FlyDBOperations \ FlyDBOperationsTest \ SalesOrderDetailOperationsSalesOrderDetailOperationsTest.cs:第82行

安迪·迈耶斯(Andy Meyers)

我相信这应该为您工作。

var count = (from d in context.SalesOrderDetailSet
                 join s in context.SalesOrderSet
                 on d.SalesOrderId.Id equals s.SalesOrderId
                 where s.new_Sefer.Id == Id
                 select d.SalesOrderId.Id).ToArray().Length;

说明:

您正在编写的linq表达式实际上并没有转换为sql。它们将转换为CRM的Query API,因此您必须以CRM linq提供程序可以解释的方式编写linq语句。这导致linq中存在的许多功能和方法不可用(例如Count())。这是指向SDK链接,其中列出了linq支持的功能。

因此,查询将基于salesorderid(这是salesorder实体的主键)将salesorderdeatil联接到salesorder记录。然后,在您的where子句中,您可以像以前一样根据ID进行过滤。最后,在选择语句中,我仅选择了记录的ID。我这样做是因为它节省了带宽。如果不这样做,CRM将选择实体的每个属性,并且在检索大文本字段时可能会导致性能问题。因此,仅检索您需要的内容。最后,由于不支持Count(),我只是将结果转换为数组并从中获取长度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用crm早期绑定类将linq转换为sql

来自分类Dev

使用group by将SQL转换为LINQ

来自分类Dev

使用MAX将SQL转换为LINQ

来自分类Dev

在不更改对象类型的情况下将早期绑定转换为后期绑定

来自分类Dev

将Outlook联系人组早期绑定Excel VBA转换为后期绑定

来自分类Dev

使用groupby,sum和count将SQL转换为Linq

来自分类Dev

使用Linq to SQL将FieldExpression转换为LambdaExpression时出错

来自分类Dev

使用sum和group by将sql查询转换为linq

来自分类Dev

使用LINQ TO SQL将查询转换为对象

来自分类Dev

使用Linq to SQL将FieldExpression转换为LambdaExpression时出错

来自分类Dev

使用groupby,sum和count将SQL转换为Linq

来自分类Dev

使用案例将SQL group by和order by转换为Linq

来自分类Dev

使用 LEFT OUTER JOIN 将 SQL 转换为 LINQ

来自分类Dev

将SQL转换为Linq-To-SQL

来自分类Dev

使用LINQ IEnumerable.ToDictionary()时无法将类隐式转换为基类

来自分类Dev

将SQL转换为EF Linq

来自分类Dev

将SQL语句转换为Linq

来自分类Dev

将sql语句转换为linq MVC

来自分类Dev

快速帮助:将SQL转换为LINQ

来自分类Dev

将SQL查询转换为LINQ查询

来自分类Dev

将SQL查询转换为LINQ

来自分类Dev

如何将SQL转换为Linq

来自分类Dev

将SQL查询转换为LINQ语句

来自分类Dev

将SQL(complex)转换为LINQ

来自分类Dev

将 sql 命令转换为 LINQ

来自分类Dev

使用ReSharper将Linq转换为代码

来自分类Dev

使用LINQ将DataRow转换为字典

来自分类Dev

使用ReSharper将Linq转换为代码

来自分类Dev

使用Linq将实体转换为XML