SubSonic内连接选择问题

时间:2009-05-27 15:02:49

标签: subsonic

我有3张桌子需要选择一些记录, 在他们的2个表中,我有相同名称的文件,当我尝试在这些文件中使用Where Expression时,我收到错误消息: 如果我使用TABLENAMe.Columns.COLNAME此错误消息显示:不明确的列名称'FKLoginID'。 如果我使用TableNAme.COLColumn.QualifiedName,它在创建的参数“@ [dbo]附近有错误。[Tbl_PersonalInformation]。[FKLoginID] 0”

如何查询这些表格? 感谢

 SqlQuery q = new Select().From(Tables.TblStockbrokerBroadDirector)
               .InnerJoin(TblPersonalInformation.PersonalInfoIDColumn, TblStockbrokerBroadDirector.FKPersonalInfoIDColumn)
               .InnerJoin(TblCompanyInformation.BizInfoIDColumn, TblStockbrokerBroadDirector.FKBizInfoIDColumn)
               .Where(TblPersonalInformation.FKLoginIDColumn.QualifiedName).IsEqualTo(User.Identity.Name);

CREATE TABLE [dbo].[Tbl_CompanyInformation](
    [Code] [bigint] IDENTITY(111111111,1) NOT NULL,
    [BizInfoID] [nvarchar](20)  NOT NULL,
    [BizName] [nvarchar](50)  NOT NULL,
    [RegisterationNO] [nvarchar](50)  NOT NULL,
    [RegisterationPlace] [bigint] NOT NULL,
    [TypeBiz] [nvarchar](50)  NOT NULL,
    [DirectManagerCode] [nvarchar](20)  NOT NULL,
    [FKAddressID] [nvarchar](20)  NOT NULL,
    [FKLoginID] [nvarchar](20)  NOT NULL,
    [SabtDate] [nvarchar](50)  NOT NULL,
    [NewName] [nvarchar](50)  NULL,
    [OldName] [nvarchar](50)  NULL,
    [DateTasisAgahi] [nvarchar](50)  NOT NULL,
    [NOTasisAgahi] [nvarchar](20)  NOT NULL,
    [NOAsasname] [nvarchar](20)  NOT NULL,
    [FKStatus] [smallint] NOT NULL CONSTRAINT [DF_Tbl_CompanyInformation_FKStatus]  DEFAULT ((0)),
 CONSTRAINT [PK_Tbl_CompanyInformation_1] PRIMARY KEY CLUSTERED 
(
    [Code] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
 CONSTRAINT [IX_Tbl_Biz] UNIQUE NONCLUSTERED 
(
    [BizInfoID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
 CONSTRAINT [IX_Tbl_CompanyRegNoP] UNIQUE NONCLUSTERED 
(
    [RegisterationNO] ASC,
    [RegisterationPlace] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[Tbl_PersonalInformation](
    [Code] [bigint] IDENTITY(111111111,1) NOT NULL,
    [PersonalInfoID] [nvarchar](20)  NOT NULL,
    [FKLoginID] [nvarchar](20)  NULL,
    [FirstName] [nvarchar](50)  NOT NULL,
    [LastName] [nvarchar](150)  NOT NULL,
    [SSN] [nvarchar](10)  NOT NULL,
    [NationalCode] [nvarchar](10)  NOT NULL,
    [CopyNCard] [image] NULL,
    [Birthyear] [nvarchar](50)  NOT NULL,
    [Birthplace] [bigint] NOT NULL,
    [FKProvince] [smallint] NOT NULL,
    [FKAddressID] [nvarchar](20)  NOT NULL,
    [Phone] [nvarchar](50)  NULL,
    [Sex] [bit] NOT NULL CONSTRAINT [DF_Tbl_PersonalInformation_Sex]  DEFAULT ((0)),
    [FKStatus] [smallint] NULL CONSTRAINT [DF_Tbl_PersonalInformation_FKStatus]  DEFAULT ((0)),
 CONSTRAINT [PK_Tbl_PersonalInformation_1] PRIMARY KEY CLUSTERED 
(
    [Code] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
 CONSTRAINT [IX_Tbl_PersonalInformation] UNIQUE NONCLUSTERED 
(
    [PersonalInfoID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


CREATE TABLE [dbo].[Tbl_Stockbroker_BroadDirector](
    [Code] [bigint] IDENTITY(111111111,1) NOT NULL,
    [StockbrokerCode] [nvarchar](20)  NOT NULL,
    [FKBizInfoID] [nvarchar](20)  NOT NULL,
    [FKPersonalInfoID] [nvarchar](20)  NULL,
    [IsStockbroker] [bit] NOT NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_IsStockbroker]  DEFAULT ((0)),
    [IsBoardDirector] [bit] NOT NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_IsBoardDirector]  DEFAULT ((0)),
    [FKStatus] [smallint] NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_status]  DEFAULT ((0)),
    [StockPercent] [float] NULL CONSTRAINT [DF_Tbl_Stockbroker_BroadDirector_StockPercent]  DEFAULT ((0)),
    [SahamdarHoghoghi] [bit] NULL,
    [FkBizinfoIDSahamdar] [nvarchar](20)  NULL,
 CONSTRAINT [PK_Tbl_Stockbroker_BroadDirector] PRIMARY KEY CLUSTERED 
(
    [Code] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
 CONSTRAINT [IX_Tbl_Stockbroker_Code] UNIQUE NONCLUSTERED 
(
    [StockbrokerCode] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

3 个答案:

答案 0 :(得分:0)

以下内容应该有效:

SqlQuery query = DB.Select().From(Tables.TblStockbrokerBroadDirector)  
  .InnerJoin(TblPersonalInformation)  
  .InnerJoin(TblCompanyInformation)  
  .Where(TblPersonalInformation.Columns.FKLoginIDColumn).IsEqualTo(User.Identity.Name);

答案 1 :(得分:0)

更改

.Where(TblPersonalInformation.FKLoginIDColumn.QualifiedName).IsEqualTo(User.Identity.Name);

.Where(TblPersonalInformation.FKLoginIDColumn).IsEqualTo(User.Identity.Name);

当你调用.QualifiedName时,你无意中调用了Where(string columnName)而不是Where(TableColumn列)。

您可以通过检查q.BuildSqlStatement()的值来验证这一点。这对于调试非常有用。

答案 2 :(得分:0)

感谢您的回答,但是通过代码,我收到了此错误消息

Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 


Line 33:                .InnerJoin(TblCompanyInformation.BizInfoIDColumn, TblStockbrokerBroadDirector.FKBizInfoIDColumn)
Line 34:                .Where(TblPersonalInformation.FKLoginIDColumn).IsEqualTo(User.Identity.Name);
Line 35:            Response.Write(q.BuildSqlStatement());
Line 36:             q.ExecuteDataSet();
Line 37:         }


Source File: E:\MehdiBackup\Visual Studio 2008\Projects\EXtjsUI\EXtjsUI\testi\default.aspx.cs    Line: 35 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   SubSonic.ANSISqlGenerator.BuildConstraintSQL(String& constraintOperator, StringBuilder sb, Boolean isFirst, Boolean& expressionIsOpen, Constraint c) +129
   SubSonic.ANSISqlGenerator.GenerateWhere() +218
   SubSonic.ANSISqlGenerator.BuildSelectStatement() +124
   SubSonic.SqlQuery.BuildSqlStatement() +71
   IMPermit.testi._default.Page_Load(Object sender, EventArgs e) in E:\MehdiBackup\Visual Studio 2008\Projects\EXtjsUI\EXtjsUI\testi\default.aspx.cs:35
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436