我创建了以下表格:
表#1:tbl_Connections
USE [taaraf_db] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[tbl_Connections]( [uc_Id] [int] IDENTITY(1,1) NOT NULL, [uc_User] [nvarchar](50) NOT NULL, [uc_Connection] [nvarchar](50) NOT NULL, [uc_IsPending] [int] NOT NULL, [uc_DateTime] [datetime] NOT NULL, CONSTRAINT [PK_tbl_Connections] PRIMARY KEY CLUSTERED ( [uc_Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[tbl_Connections] ADD CONSTRAINT [DF_tbl_Connections_uc_IsPending] DEFAULT ((1)) FOR [uc_IsPending] GO
表#2:tbl_LiveStream
USE [taaraf_db] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[tbl_LiveStreams]( [ls_Id] [int] IDENTITY(1,1) NOT NULL, [ls_Story] [nvarchar](max) NOT NULL, [ls_User] [nvarchar](50) NOT NULL, [ls_Connection] [nvarchar](50) NOT NULL, [ls_DateTime] [datetime] NOT NULL, CONSTRAINT [PK_tbl_LiveStreams] PRIMARY KEY CLUSTERED ( [ls_Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
现在,tbl_Connections中的uc_User代表发起了好友请求的用户,而uc_Connection则代表了另一方。相同的概念应用于第二个表(tbl_LiveStreams)
我正在尝试为cetrain用户选择所有新的LiveStream,仅当该用户连接到另一方时,才应为该特定用户检索LiveStream(uc_IsPending = 0)
我有一个采用以下参数的C#函数:
public static DataTable GetAsyncLiveStream(string CurrentUser, int startAt, int howMany) { … }
public static DataTable GetAsyncLiveStream(string CurrentUser, int
startAt, int howMany) { … }
借助上述内容,如果上述指定的要求为true,则DataTable应该为给定的CurrentUser(ls_User)返回LiveStream中的所有新项。
有点像Facebook新闻提要,与朋友的关系等等…哦,是的,只要有人(ls_User)向(ls_Connection)发起某种特定事件,就会填充tbl_LiveStream。
我不确定我是否在使我的生活复杂化,但这就是我所拥有的,所有帮助都将受到赞赏。
我应该提到我是通过遍历tbl_LiveStream的所有返回记录并使用自定义类函数.IsFriends()进行一些验证来完成的,该函数将检查数据库中的友谊状态并以编程方式填充DataTable …我承认这有点愚蠢。但是我不确定该怎么做。
最后一件事,我正在使用以下查询返回有限的结果:
SELECT * FROM ( SELECT row_number() OVER (ORDER BY ) AS rownum, ls_Id FROM ) AS A WHERE A.rownum BETWEEN (@start) AND (@start + @rowsperpage)
请帮助,并感谢您的宝贵时间。
编辑 我想指出,这就是我从tbl_Connections表中获取谁与谁的朋友的方式。
const string sql = "SELECT REPLACE((uc_Connection + uc_User), @CurrentUser, '') AS Connection " + "FROM tbl_Connections Connection " + "WHERE (@CurrentUser = uc_Connection) OR (@CurrentUser = uc_User)";
此语法是错误的。你不能那样做。使用联合,或使用LINQ to SQL。
从批评的角度来看,不要获取数据表,不要获取实体。对于您可能不熟悉的技术,您似乎过于复杂了。我建议您获取当前所有现有数据并将其转储到CSV文件中,然后使用Sharp Architecture之类的工具从头开始启动应用程序,该程序可以为您抽象一些细节。