Member 10303917 Ответов: 1

Запрос Linq возвращает дубликат записи из базы данных SQL


Я пытаюсь объединить три запроса linq в один запрос и отобразить записи в приложении angular js. Но проблема в том, что когда я ввожу номер счета и нажимаю кнопку Отправить, он также отображает дубликат записи.

Что я уже пробовал:

public string TranscationDetails(string Account_Number)
{
    var accountNumber = int.Parse(Account_Number);//It could be better to use TryParse
    using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities())
    {
        var CombinedQuery = (from x in context.Current_Account_Deposit
                             join y in context.Current_Account_Withdraw on x.Account_Number equals y.Account_Number
                             join z in context.Current_Account_Details on y.Account_Number equals z.Account_Number
                             where x.Account_Number == accountNumber
                             select new
                             {
                                 x.Account_Number,
                                 x.Amount,
                                 Amount1 = y.Amount,
                                 z.Account_Balance,
                             }).ToList();

        var js = new System.Web.Script.Serialization.JavaScriptSerializer();
        return js.Serialize(CombinedQuery); // return JSON string
    }
}

1 Ответов

Рейтинг:
0

Richard Deeming

Предполагая, что ваша база данных настроена правильно, вы можете иметь ноль, один или несколько депозитов / снятий для одного счета. Выполнение внутреннего соединения между тремя таблицами не будет работать.

Начните со счета. Выберите вклады и суммируйте их. Выберите вывод средств и суммируйте их. Затем верните результат.

Что-то вроде этого:

from account in context.Current_Account_Details

join deposit in context.Current_Account_Deposit on account.Account_Number equals deposit.Account_Number into deposits
let totalDeposit = deposits.Select(d => d.Amount).DefaultIfEmpty().Sum()

join withdrawal in context.Current_Account_Withdrawals on account.Account_Number equals withdrawal.Account_Number into withdrawals
let totalWithdrawal = withdrawals.Select(w => w.Amount).DefaultIfEmpty().Sum()

where account.Account_Number == accountNumber

select new
{
    account.Account_Number,
    TotalDeposit = totalDeposit,
    TotalWithdrawal = totalWithdrawal,
    account.Account_Balance,
};

Выполнение левых внешних соединений | Microsoft Docs[^]