2012-06-30 49 views
0

美好的一天。我得到了一些表结果UDF在我MS SQL 2008R2基地和一些映射类“ApplicationGroupsResult”LINQ to SQL与UDF - 寻呼异常

ALTER FUNCTION [dbo].[netsqlazman_ApplicationGroups]() 
RETURNS TABLE 
AS RETURN 
SELECT  dbo.[netsqlazman_ApplicationGroupsTable].* 
FROM   dbo.[netsqlazman_ApplicationGroupsTable] INNER JOIN 
         dbo.[netsqlazman_Applications]() Applications ON dbo.[netsqlazman_ApplicationGroupsTable].ApplicationId = Applications.ApplicationId 



[Function(Name="dbo.netsqlazman_ApplicationGroups", IsComposable=true)] 
public IQueryable<ApplicationGroupsResult> ApplicationGroups() 
{ 
return base.CreateMethodCallQuery<ApplicationGroupsResult>(this, (MethodInfo) MethodBase.GetCurrentMethod(), new object[0]); 
} 

现在我要带几个记录:

  var query = context.ApplicationGroups(); 

      totalRecordsCount = query.Count(); 

      query = string.IsNullOrWhiteSpace(sortBy) 
         ? query.OrderBy(x => x.ApplicationGroupId) 
         : query.OrderBy(sortBy); 

      return query 
       .Skip(pageNumber*queryRecordsCount) 
       .Take(queryRecordsCount) 
       .ToArray(); 

而且我得到了异常:“这提供程序仅支持跳过已排序的查询,返回包含所有标识列的实体或投影,其中查询是单表(非连接)查询,或者是Distinct,Except,Intersect或Union(不是Concat)操作。

带有UDF的LinqToSQL是否支持分页? 如果这样做,那么我做错了什么?

+0

为什么不只是使用视图? – leppie

回答

0

我发现这个问题 - DataContext的图书馆,我用了

[Provider(typeof(Sql2000Provider))] 

所以该查询不会没有“另类”的工作,因为在SQL 2000没有ROW_NUMBER运营商和生成分页查询的唯一途径就是用不同的技巧。 LINQ查询应该如何处理。

return query 
      .Distinct() 
      .Skip(pageNumber*queryRecordsCount) 
      .Take(queryRecordsCount) 
      .ToArray(); 

我刚刚创建了自己的DataContext和问题解决了:

[Provider(typeof(Sql2008Provider))] 
public sealed class AzManDataContext : NetSqlAzManStorageDataContext 
{ 
    public AzManDataContext(IDbConnection connection) : base(connection) 
    { } 
} 

附:

下面是问题:“查询是单表(非连接)查询”。

MSSQL中的表结果函数像单个查询一样处理,因此在分页查询中使用它们是正确的。

0

问题出在这里:“查询是一个单表(非连接)查询”。

UDF中的查询对另一个表执行Inner Join。为了使Skip正常工作,必须有一个相当“稳定”的结果集,以确保它能够精确地选择它的块,而不是每次都抽取一些随机数据。

顺便说一句,这个UDF只是为了举例的目的?这看起来像是可以在LINQ中以强类型方式轻松表达的,所以我不得不想知道为什么您会希望使用UDF?

+0

执行连接的查询并不重要,因为L2S无法知道这一点。 – usr