Хобрук: Ваш путь к мастерству в программировании

Запрос Linq не смог объединить запись двух таблиц

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

IQueryable »не содержит определения для« Concat », а для лучшей перегрузки метода расширения« ParallelEnumerable.Concat (ParallelQuery, IEnumerable) »требуется получатель типа« ParallelQuery.

Вторая ошибка: Весь код метода не возвращает все значение пути.

Вот мой интерфейс.

[OperationContract]
        [WebInvoke(Method = "GET",
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
     //BodyStyle = WebMessageBodyStyle.Bare,
     UriTemplate = "/TranscationDetails/{Account_Number}")]
        string TranscationDetails(string Account_Number);

Вот реализация.

  public string TranscationDetails(string Account_Number)
        {

            using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities())
            {

                var DepositQuery = from x in context.Current_Account_Deposit
                                   where x.Account_Number == Convert.ToInt32(Account_Number)
                                   select x;

                var WithdrawQuery = from x in context.Current_Account_Withdraw
                                    where x.Account_Number == Convert.ToInt32(Account_Number)
                                    select x;

                var merge = DepositQuery.Concat(WithdrawQuery);//**Error on this line**


            }

        }  

  • var merge = DepositQuery.Union(WithdrawQuery); (доступно, если Current_Account_Deposit & Current_Account_Withdraw имеют одинаковую структуру). Также вам необходимо вернуть строку для метода TranscationDetails (в настоящее время она отсутствует, или, если вы возвращаете результаты запроса, используйте IQueryable). 15.12.2017
  • Какой результат вы получите с Union() методом? Для выполнения Union оба результата запроса должны иметь одинаковый список столбцов. Если оба набора результатов различны, создайте объект IEnumerable с ToList(), затем используйте Union(). 15.12.2017
  • я хочу выбрать всю запись из таблиц Current_Account_Deposit и Current_Account_Withdraw с номером учетной записи, а затем объединить их в один запрос 15.12.2017
  • Попробуйте использовать Join метод: from x in context.Current_Account_Deposit join y in context.Current_Account_Withdraw on x.AccountNumber equals y.AccountNumber where x.Account_Number == Convert.ToInt32(Account_Number) select ...; 15.12.2017
  • Этот метод Join уже сработал? И какой именно тип возвращаемого значения вы хотите для TranscationDetails метода (я предполагаю, что вы хотите IQueryable, но вы определили его как строку)? 15.12.2017

Ответы:


1

Вам не нужно использовать 2 отдельных запроса, просто создайте один запрос, объединив 2 таблицы и выбрав все необходимые свойства из набора результатов. Затем вы можете поместить его в объект IEnumerable и использовать сериализатор JSON для возврата ответа JSON из результата запроса:

public string TranscationDetails(string Account_Number)
{
     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
                             where x.Account_Number == Convert.ToInt32(Account_Number)
                             select new { 
                                x.Account_Number,
                                // put other properties here 
                             }).ToList();

         var js = new System.Web.Script.Serialization.JavaScriptSerializer();

         return js.Serialize(CombinedQuery); // return JSON string
     }
}
15.12.2017
  • Какие свойства таблицы мне нужно использовать? Депозит на текущий счет или вывод средств на текущий счет ?? 15.12.2017
  • В обеих таблицах у меня есть такие свойства, как номер счета, тип транзакции, сумма, имя владельца счета и т. Д. 15.12.2017
  • Оба свойства таблицы могут использоваться, в зависимости от ваших потребностей. Также вы можете использовать select new { x, y }, если хотите вернуть все результаты из обеих таблиц. 15.12.2017
  • Я хочу вернуть номер счета, имя владельца счета, тип транзакции, сумму депозита с текущего счета, а также тип транзакции и сумму снятия с текущего счета. 15.12.2017
  • Тогда вы можете использовать select new { x.AccountNumber, x.AccountHolderName, x.TransactionType, x.Amount, y.TransactionType, y.Amount }. Обратите внимание: поскольку две группы столбцов (TransactionType & Amount) имеют одинаковое имя для обеих таблиц, вам может потребоваться дополнительное именование, чтобы различать их. 15.12.2017
  • Большое спасибо за вашу помощь и поддержку. 15.12.2017
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..