如何包含单个用户的交易

Lee*_*gan 1 c# linq asp.net

我正在尝试获取一个用户,包括另一个表中的所有交易。用户和交易之间存在一对多的关系。获取用户后如何包括交易?

public class User{
        [Key]
        public int id{get;set;}
        public string FirstName{get;set;}
        public string LastName{get;set;}
        public string Email{get;set;}
        public string Password{get;set;}
        public DateTime CreatedAt{get;set;} = DateTime.Now;
        public DateTime UpdatedAt{get;set;} = DateTime.Now;
        public List<Transaction> Transactions{get;set;}

        [NotMapped]
        public string ConfirmPassword{get;set;}
    }

#Controller
[HttpGet("account")]
        public IActionResult Account(){
            User user = context.Users.FirstOrDefault(u => u.id == HttpContext.Session.GetInt32("user"))
                .Include(u => u.Transactions);

            return View("account", user);
        }
Run Code Online (Sandbox Code Playgroud)

我只希望将事务传递给视图时包括在用户中。我不知道该怎么做。现在,它告诉我“用户不包含include的定义”如何实现?

Mey*_*eri 5

解决方案1:在IQueryable上执行查询之前,必须包括相关表,如下所示:

var userId = HttpContext.Session.GetInt32("user");

User user = _context.Users.Where(u => u.id == userId)
    .Include(u => u.Transactions)
    .AsNoTracking()
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

解决方案2:您可以选择一个具有该用户的交易清单的用户,如下所示:

var userId = HttpContext.Session.GetInt32("user");

User user = _context.Users
    .AsNoTracking()
    .Where(u => u.id == userId)
    .Select(u => new User
    {
        //Select all properties like this :
        FirstName = u.FirstName,
        LastName = u.LastName,
        //... Other properties,
        Transactions = u.TransActions.Select(t => new TransationViewModel
        {
            //Select all properties like this :
            //Name = t.Name
        }).ToList()
    })
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)