Entity Framework join ошибка

199
12 декабря 2017, 16:40

Есть две таблицы

public partial class Tax
{    
    public int id { get; set; }
    public string name { get; set; }
    public int category { get; set; }
    public string property { get; set; }
    public decimal price { get; set; }
    public virtual Category Category1 { get; set; }
}
public partial class Category
{
    public int id { get; set; }
    public string title { get; set; }
    public virtual ICollection<Tax> Tax { get; set; }
}

Есть метод который должен вывести таблицу Tax join Category, то есть заместо id.Category должен быть title.Category. Запрос выглядит таким образом.

    public IEnumerable<Tax> GetAllTax()
    {
        var res = from p in dbentities.Tax
                  join c in dbentities.Category on p.category equals c.id
                  select new { p.name, c.title, p.property, p.price };
        return res.ToList();
    }

Но студия ругается на анонимные типы, как лучше преобразовать метод?

Ошибка CS0266 Не удается неявно преобразовать тип "System.Collections.Generic.List<>" в "System.Collections.Generic.IEnumerable".

Answer 1

Нельзя возвращать анонимный тип.

 var res = from p in dbentities.Tax
              join c in dbentities.Category on p.category equals c.id
              select new { p.name, c.title, p.property, p.price }; // ошибка

Надо определить какой-то новый модель создать 'Result/Query object'.

class TaxQueryModel
{
   public string Name { get; set; }
   public string Title { get; set; }
   public string Property { get; set; }
   public decimal Price { get; set; }
}
public IEnumerable<TaxQueryModel> GetAllTax()
{
    var res = from p in dbentities.Tax
              join c in dbentities.Category on p.category equals c.id
              select new TaxQueryModel 
                     { 
                      Name = p.name, Title = c.title, Property = p.property, 
                      Price = p.price 
                     };
    return res;
}

можно и так но в дальнейшем это проблема (и в Entity Framework тоже).

public partial class Tax
{    
    public int id { get; set; }
    public string name { get; set; }
    public int category { get; set; }
    public string property { get; set; }
    public decimal price { get; set; }
    public string title { get; set; } // добавил
    public virtual Category Category1 { get; set; }
}
public IEnumerable<Tax> GetAllTax()
{
     var res = from p in dbentities.Tax
              join c in dbentities.Category on p.category equals c.id
              select new Tax
              { 
                name = p.name, title = c.title, property = p.property, 
                   price = p.price 
              };
     return res;
}
READ ALSO
запрос и отображение данных из базы данных в с#

запрос и отображение данных из базы данных в с#

Добрый день, я только начал изучать c#(windows form application) и тут же возник вопрос как работать с базами данных и и отображением данных из них(кастомизация...

160
Sort array based on priority of an other array? [требует правки]

Sort array based on priority of an other array? [требует правки]

Хочу отсортировать юзеров по алфавиту через sortUsers function, но в приоритете должен выступить массив "usersPrioritated" - то есть, результат должен быть...

285
Массив строк в массив обьектов JS

Массив строк в массив обьектов JS

Как из массива строк:

333