Выберите столбец из другой таблицы на основе идентификатора с помощью Entity Framework - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть следующие классы:

public class Blog {
    public int Id {get; set;}
    public String Name {get; set;}
    ...
    ...
    public int CatId {get;set;}
}

public class BlogCategory{
    public int Id {get; set;}
    public String Name {get; set;}
    public virtual Blogs {get; set;}
}

Теперь у меня есть модель просмотра на моей странице бритвы:

public BlogViewModel{
    public int Id {get; set;}
    public string Name {get; set;}
    ..
    ..
    public string CategoryName {get; set;}
}

Я пытаюсь выбрать блог и содержать его категориюname: my Query:

Blogs = await _context.Blogs
    .Select(b => new BlogViewModel()
    {
        Id = b.Id,
        Name = b.Name,        
        //CategoryName = 
    })
    .ToListAsync();

как я могу выбрать имя категории из таблицы BlogCategory на основе имеющегося у меня CatId?

Одним из способов является добавление

public virtual Category BlogCat {get; set;}

к классу блога, а затем использование «Включить», но я не хочу использовать этот метод, так как хочу, чтобы имя категории не было полным объектом.

любая помощь, пожалуйста?

Решение:

Blogs = await _context.Blogs
        .Select(b => new BlogViewModel()
        {
            Id = b.Id,
            Name = b.Name,        
            CategoryName = _context.BlogCategory
                        .Where(c => c.Id == b.CatId)
                        .Select(c => c.Name)
                        .SingleOrDefault()
        })
        .ToListAsync();

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Решение:

Blogs = await _context.Blogs
        .Select(b => new BlogViewModel()
        {
            Id = b.Id,
            Name = b.Name,        
            CategoryName = _context.BlogCategory
                        .Where(c => c.Id == b.CatId)
                        .Select(c => c.Name)
                        .SingleOrDefault()
        })
        .ToListAsync();
0 голосов
/ 18 декабря 2018
    var blogModels = ( from b in _context.Blogs 
     join c in _context.BlogCategories 
     on b.CatId equals c.Id
     select new BlogViewModel()
      {
       Id = b.Id,
       Name = b.Name,        
       CategoryName = c.Name
        }).ToList();
...