FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 6904|回复: 12
打印 上一主题 下一主题

subsonic进行多表关联查询时出现的查询结果不对的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-22 09:02:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SqlQuery q = new Select(XSmsSend.SendUserColumn, XSmsSend.SendTimeColumn, XSmsSend.SendContentColumn, XSmsSend.ReceiveUNameColumn, XSmsSend.ReceiveNumberColumn, XSmsDetail.GuidIdColumn, XSmsDetail.ReasonColumn, XSmsDetail.SendCountColumn, XSmsDetail.SentTimeColumn).From<XSmsDetail>().InnerJoin(XSmsSend.GuidIdColumn, XSmsDetail.GuidIdColumn);
           // q.Where("1").IsEqualTo("1");
            // 在公司名称中搜索
            string searchText = ttbSearchMessage.Text.Trim();
            if (!String.IsNullOrEmpty(searchText))
            {
                q.And(XSmsSend.ReceiveNumberColumn).ContainsString(searchText);
            }
            
            // 在查询添加之后,排序和分页之前获取总记录数
            // Grid1总共有多少条记录
            Grid1.RecordCount = q.GetRecordCount();
          备注:此处查询的结果和实际的结果值相同如3条,
           
            
            // 排列
            //q.OrderBys.Add(GetSortExpression(Grid1, XUser.Schema));
            // 数据库分页
            q.Paged(Grid1.PageIndex + 1, Grid1.PageSize);
            XSmsSendCollection items = q.ExecuteAsCollection<XSmsSendCollection>();
        //此处查询得到的集合的记录是9条,这个是否是subsonic的bug还是我写的有问题

沙发
 楼主| 发表于 2012-12-22 12:15:42 | 只看该作者
DECLARE @Page int
DECLARE @PageSize int

SET @Page = 1
SET @PageSize = 20

SET NOCOUNT ON

-- create a temp table to hold order ids
DECLARE @TempTable TABLE (IndexId int identity, _keyID VarChar(50))

-- insert the table ids and row numbers into the memory table
INSERT INTO @TempTable
(
  _keyID
)
SELECT
[dbo].[X_SmsSend].[SendUser]
     FROM [dbo].[X_SmsDetail]
INNER JOIN [dbo].[X_SmsSend] ON [dbo].[X_SmsDetail].[GuidId] = [dbo].[X_SmsSend].[GuidId]
WHERE 1 = @10

                        
-- select only those rows belonging to the proper page
    SELECT [dbo].[X_SmsSend].[SendUser], [dbo].[X_SmsSend].[SendTime], [dbo].[X_SmsSend].[SendContent], [dbo].[X_SmsSend].[ReceiveUName], [dbo].[X_SmsSend].[ReceiveNumber], [dbo].[X_SmsDetail].[GuidId], [dbo].[X_SmsDetail].[Reason], [dbo].[X_SmsDetail].[SendCount], [dbo].[X_SmsDetail].[SentTime]
FROM [dbo].[X_SmsDetail]
INNER JOIN [dbo].[X_SmsSend] ON [dbo].[X_SmsDetail].[GuidId] = [dbo].[X_SmsSend].[GuidId]

INNER JOIN @TempTable t ON [dbo].[X_SmsSend].[SendUser] = t._keyID
WHERE t.IndexId BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize)
板凳
 楼主| 发表于 2012-12-22 12:17:11 | 只看该作者
查询出来的数据是实际数据的三倍,没办法在数据库中把表相关联的表做成了视图,通过数据库解决了,哪位知道什么问题,指导一下呀
地板
 楼主| 发表于 2012-12-22 14:41:46 | 只看该作者
本帖最后由 唐铁明 于 2012-12-23 03:56 编辑

跟踪下来跟q.Paged(Grid1.PageIndex + 1, Grid1.PageSize);这一句有关,还在查找中,数据库及表内容如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
5#
发表于 2012-12-24 02:58:31 | 只看该作者
好奇怪,怎么分页记录数比总记录说还多。

你看下调用 q.Paged(Grid1.PageIndex + 1, Grid1.PageSize); 时 PageIndex 和 PageSize 分别是多少?
6#
 楼主| 发表于 2012-12-24 03:30:38 | 只看该作者
我写成q.paged(1,20)也是这样
7#
发表于 2012-12-24 13:39:46 | 只看该作者
也可能是 SubSonic 的BUG,你用AppBox里我修改后的Subsonic试下
8#
 楼主| 发表于 2012-12-25 07:21:29 | 只看该作者
我用的就是修改后的Subsonic试的,也是有问题。
9#
发表于 2012-12-28 00:32:00 | 只看该作者
这个问题,怎么解决的?我用你的数据试了,也是一样的,9条数据,怎么回事?
10#
发表于 2012-12-28 04:19:38 | 只看该作者
还真没那个习惯用subsonic,习惯自己写数据库组建。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-1 09:30 , Processed in 0.047555 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表