使用Linq / Lambda从两个表中选择数据

时间:2016-11-06 15:59:20

标签: c# database linq lambda

当客户使用社会安全号码登录网站时,我希望它向客户显示客户名称,帐户号码和余额。这些信息必须通过数据库获取。

帐户表:

   CREATE TABLE [dbo].[Accounts] (
[id]            BIGINT       IDENTITY (1, 1) NOT NULL,
[accountnumber] VARCHAR (50) NULL,
[accountname]   VARCHAR (50) NULL,
[SSN]           BIGINT       NOT NULL,
[CustomerId]    INT          NULL,
[balance]       VARCHAR (50) NULL,
[BalanceId]     INT          NULL,
[AccountId]     INT          NULL,
CONSTRAINT [PK_dbo.Accounts] PRIMARY KEY CLUSTERED ([id] ASC),
CONSTRAINT [FK_dbo.Accounts_dbo.Customer] FOREIGN KEY ([SSN]) REFERENCES [dbo].[Customer] ([SSN])
 );


GO
CREATE NONCLUSTERED INDEX [IX_SSN]
ON [dbo].[Accounts]([SSN] ASC);

客户表:

    CREATE TABLE [dbo].[Customer] (
[id]                BIGINT          IDENTITY (1, 1) NOT NULL,
[Firstname]         VARCHAR (50)    NULL,
[Lastname]          VARCHAR (50)    NULL,
[SSN]               BIGINT          NOT NULL,
[Password]          VARBINARY (MAX) NULL,
[ConfirmPassword]   VARCHAR (MAX)   NULL,
[Salt]              VARCHAR (MAX)   NULL,
[AccountId]         INT             NULL,
[BalanceId]         INT             NULL,
[RegPayId]          INT             NULL,
[ConfirmedRegPayId] INT             NULL,
[CustomerId]        INT             NULL,
CONSTRAINT [PK_dbo.Customer] PRIMARY KEY CLUSTERED ([SSN] ASC)
   );

但是这段代码告诉我没有客户:

       List<AccountsCTX> everyBalance = db.Accounts.Join(db.Customer, a => a.id, 
                                                                      c => c.SSN, 
                                                              (a, c) => new AccountsCTX()
        {
            //id = a.id,
            SSN = a.SSN,
            accountname = a.accountname,
            accountnumber = a.accountnumber,
            balance = a.balance
        }
                            ).ToList();
        return everyBalance;

我将表“Accounts”和“SSN”中的“id”作为主键,作为“Customer”表中的外键。

我还是编程的新手所以需要更多的练习xD 让我知道更多细节,并感谢我能得到的所有帮助!

2 个答案:

答案 0 :(得分:1)

你可以尝试

    public static AccountsCTX GetEveryBalance(long currentCustomerSsn)
    { 
     AccountsCTX everyBalance = db.Accounts.Join(db.Customer, a => a.SSN, 
                                                                          c => c.SSN, 
                                                                  (a, c) => new AccountsCTX()
            {
                //id = a.id,
                SSN = a.SSN,
                accountname = a.accountname,
                accountnumber = a.accountnumber,
                balance = a.balance
            }
                                ).Where(x=>x.SSN==currentCustomerSsn).FirstOrDefault();//currentCustomerSsn is enter ssn by Customer
            return everyBalance;
    }

    //Create customer
    public long insertCusReg(CustomerCTX inCusReg)
    {
        ...
        try
        {
            ...
            return inCusReg.SSN;
        }
        catch (Exception)
        {
            return 0;
        }


    } 

通话方法

currentCustomerSsn=insertCusReg(CustomerCTX);// pass CustomerCTX object 
AccountsCTX everyBalance=GetEveryBalance(currentCustomerSsn);

答案 1 :(得分:1)

实际上我没有看到除了SSN之外提供的两个表之间的任何关系,这个内连接将获取所有表中具有相同SSN id的记录:

List<AccountsCTX> everyBalance = db.Accounts.Join(db.Customer, a => a.SSN, 
                                                                      c => c.SSN, 
                                                              (a, c) => new AccountsCTX()
        {
            SSN = a.SSN,
            accountname = a.accountname,
            accountnumber = a.accountnumber,
            balance = a.balance
        }).Where(x=>x.SSN==InputSSN).ToList();
        return everyBalance;