我正在开发通过动态实体(如 Microsoft.Xrm.Sdk.Entity,后期绑定方法)使用 CRM 2011 数据的服务。我故意不使用 Xrm.cs 方法(早期绑定)以保持我的解决方案通用。
此外,我想避免直接连接到 CRM 数据库(例如 EDMX),因为这会阻止我的解决方案可用于托管 CRM(例如,没有直接的数据库访问)。
我有以下(简化的)要求,我真的在为选择标准苦苦挣扎:
需要选择(并更新)随机 7%的记录。
在 SQL 中,选择标准相对容易——我知道如何选择随机百分比的记录。就像是:
SELECT TOP 7 PERCENT * FROM
(
SELECT TOP 1000 NEWID() AS Foo, [someColumns]
FROM [someTable]
)
AS Bar ORDER BY Bar.Foo ASC
这完美地工作。我收集的 LINQ 等价物类似于:
from e in someEntities
orderby Guid.NewGuid()
select e;
但是有一个问题,我不知道如何将 LINQ 与 CRM 2011 动态实体一起使用 - 相反,他们坚持使用一些限制性 QueryExpression 类/语法或 fetchXML,如本页 (MSDN)所示。
我已经确定了满足此要求的以下选项:
使用动态实体,将整个记录集返回到列表中,然后简单地按索引选择随机选择。然而,这涉及通过互联网数据服务返回多达 10,000 条记录,这可能会很慢/不安全/等等。
使用 fetchXML 语句。不幸的是,我不知道 fetchXML,所以我不知道是否可以执行 COUNT、TOP、PERCENT 或 NEWID() 之类的操作。
使用 Xrm.cs 和 LINQ,或使用存储过程或 SQL 视图。所有这些选项都意味着将解决方案绑定到直接数据库连接和/或早期绑定,这是不可取的。
对客户说不。
任何建议将不胜感激!fetchXML 可以执行这个查询吗?有一个更好的方法吗?