@King_Of_Demons
Junior C# Developer

Как через LINQ вывести из базы данных вместо Id имя пользователя?

В базе данных две таблицы Wallet,Transaction и AspNetUser , надо сделать историю переводов, только надо вместо ID отправителя и получателя вывести их имена. Вывод информаций сделал, только вот не могу понят как связать ID из Transaction c AspNetUser через ID из Wallet. Принцип по кторому можно сделать такое знаю из SQL но как провернуть такое в LINQ пока не прецтавляю. Помогите кто знает как такое можно устройть.
WalletController.cs
[HttpGet]
        [Route("transactions")]
        public List<Transaction> GetTransactions()
        {
            var TransactionList = new List<Transaction>();
            var userId = _userManager.GetUserId(User);
            var listId = _context.Users.Include(x => x.Wallets).FirstOrDefault(x => x.Id == userId)?.Wallets.Select(x => x.Id).ToList();
            TransactionList = _context.Transactions.Where(x => listId.Contains(x.SourceWalletId) || listId.Contains(x.DestinationWalletId)).ToList();
            TransactionList = TransactionList.Distinct().ToList();
            return TransactionList;
        }


Transaction.cs
using System;

namespace BlazorPaymentSystem.Server.Models
{
    public class Transaction
    {
        public Guid Id { get; set; }
        public Guid SourceWalletId { get; set; }
        public Guid DestinationWalletId { get; set; }
        public decimal Amount { get; set; }
        public DateTime Date { get; set; }
    }
}

ApplicationDbContext.cs
namespace BlazorPaymentSystem.Server.Data
{
    public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
    {
        public ApplicationDbContext(
            DbContextOptions options,
            IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions)
        {
        }

        public DbSet<Wallet> Wallets { get; set; }
        public DbSet<Transaction> Transactions { get; set; }
    }
}
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 1
@basrach
Я не проверял, но должно быть как-то так:
var transactionList =
		from transaction in _context.Transactions
		from destinationUser in _context.Users
		from destinationUserWallet in destinationUser.Wallets where destinationUserWallet.Id == transaction.DestinationWalletId
		from sourceUser in _context.Users
		from sourceUserWallet in sourceUser.Wallets where sourceUserWallet.Id == transaction.SourceWalletId		
		where destinationUser.Id == User || sourceUser.Id == User
		select new 
		{ 
			sourceUserName = sourceUser.Name, 
			destinationUserName	= destinationUser.Name, 
			transaction
		};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы