Запрос Linq к объекту с ошибкой возврата подзапроса

#c# #linq-to-sql #linq-to-entities

#c# #linq-to-sql #linq-to-entities

Вопрос:

У меня есть запрос Linq к сущности с подзапросом, который возвращает ошибку, с которой, я надеюсь, кто-нибудь сможет мне помочь.

Сообщение об ошибке:

 "Unable to create a constant value of type 'SmallBusinessManager.Models.TransactionAllocation'. Only primitive types ('such as Int32, String, and Guid') are supported in this context."
  

Запрос Linq:

 var query = from transactionSelect in smallBusinessManagerDB.Transaction
        select new
        {
         TransactionId = transactionSelect.TransactionId,
         TransactionNumber = transactionSelect.TransactionNumber,
         Amount = transactionSelect.Amount,
         Balance = (from t2 in smallBusinessManagerDB.TransactionAllocation
                    where t2.InvoiceTransactionId == transactionSelect.TransactionId
                    group t2 by t2.TransactionAllocationId into g
                    select g.Sum(p => p.AllocatedAmount))
};
  

Заранее спасибо,

Крис

Комментарии:

1. Почему бы вам не использовать отношение?

2. Какие объекты или свойства относятся к типу TransactionAllocation ? Это всего лишь smallBusinessManagerDB.TransactionAllocation ?

Ответ №1:

Попробуйте это:

 var query = 
    from transactionSelect in smallBusinessManagerDB.Transaction
    select new
    {
        TransactionId = transactionSelect.TransactionId,
        TransactionNumber = transactionSelect.TransactionNumber,
        Amount = transactionSelect.Amount,
        Balance = smallBusinessManagerDB.TransactionAllocation
            .Where(t2 => t2.InvoiceTransactionId == transactionSelect.TransactionId)
            .Sum(p => p.AllocatedAmount)
    };
  

Комментарии:

1. Спасибо за ответ, Алекс. Я внес изменения, однако произошла та же ошибка. Не удается создать постоянное значение типа ‘SmallBusinessManager. Модели. TransactionAllocation’. В этом контексте поддерживаются только примитивные типы (‘такие как Int32, String и Guid’).

2. Что произойдет, если вы сделаете просто var x = smallBusinessManagerDB.Transaction.ToList() и var y = smallBusinessManagerDB.TransactionAllocation.ToList() ?

3. x возвращается как System. Коллекция. Generic.List<SmallBusinessManager. Модели. Транзакция> со всеми записями в базе данных y возвращается как System. Коллекция. Generic.List<SmallBusinessManager. Модели. TransactionAllocation> со всеми записями в базе данных

4. @Chris Nieu — можете ли вы взять мой запрос, прокомментировать установщик баланса и проверить, работает ли он? (Пытаюсь локализовать эту проблему)