日安。我在我的MS SQL 2008R2库和一些映射类"ApplicationGroupsResult“中得到了一些表结果
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();我得到了一个例外:“这个提供程序只支持顺序查询,返回包含所有标识列的实体或投影,其中查询是一个单表(非连接)查询,或者是一个不同的(除了互斥)或Union (不连接)操作。”
带有UDF的LinqToSQL支持分页吗?如果是这样,那我做错了什么?
发布于 2012-07-02 04:45:23
我在我使用的库中发现了问题-- DataContext。
[Provider(typeof(Sql2000Provider))]因此,如果没有" distinct“,该查询就无法工作,因为在sql 2000中没有Row_number操作符,生成分页查询的唯一方法是使用distinct的技巧。在这种情况下,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中的表结果函数像单个查询一样处理,因此在分页查询中使用它们是正确的。
发布于 2012-07-01 13:39:12
问题是:“查询是单表(非联接)查询”。
UDF中的查询对另一个表执行Inner Join。为了使Skip工作,必须有一个相当“稳定”的结果集,以确保它能够准确地选择块,而不是每次都提取一些随机数据。
顺便问一下,这个UDF仅仅是为了达到这个目的吗?它看起来可以很容易地以强类型的方式在LINQ中表达,所以我不得不想知道为什么你会希望它使用一个UDF?
https://stackoverflow.com/questions/11276376
复制相似问题