Как правильно читать данные из связанной таблицы в LINQ - PullRequest
0 голосов
/ 11 октября 2019

Я работаю с двумя таблицами:

Products и Enums.

Enums Таблица содержит перечисления для каждого класса в системе, если это необходимо, например, перечислениядля ProductTypes, EmployeeType и т. д. и т. д.

В каждой из моих не таблиц перечисления я держу целочисленное значение, которое представляет enum value.

Я пытался прочитать данные из таблицы Enum, и это работает, но мне кажется, что сейчас это сложно:

public class ClassesEnums 
{
    public int Type { get; set; }
    public string Title { get; set; }
    public long Value { get; set; }
}
public class Product
{
    public long ProductId {get;set;}
    public ProductType ProductType { get; set; } // this is contained in ClassesEnums table
    public string ProductType { get; set; } 
    public WarehouseType WarehouseType { get; set; } // this is contained in ClassesEnums table
}

, поэтому один из моихСтрока продуктов выглядит следующим образом:

id  product_type    warehouse_type

1        10               7

Вот ГЛАВНЫЙ код, где я читаю данные из таблицы Enum:

var query = _context.Products.Where(x => x.ProductId == searchObject.ProductId)
           .Join(_context.ClassesEnums.Where(x => x.Type == (int)ClassesEnums.ProductType),
           prod => (long)prod.ProductType,
           enums => enums.Value,
           (prod, enums) => new
           { prod, enum })
          .Join(_context.ClassesEnums.Where(x => x.Type == (int)ClassesEnums.WarehouseType),
             prodWt => (long)prodWt.prod.WarehouseType,
             enumsWt => enumsWt.Value,
             (prodWt, enumsWt) => new
             {
                 prodWt,
                 enumsWt
             })
          .Select(x => new ProductDTO
          {
             ProductType = x.prodWt.enums.Name
             // And so on
          });

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

PS Я думал о .Include () Но я считаю, что это не сработает, как ожидалось, потому что между этими двумя таблицами нет внешних ключей.

Спасибо

Приветствия

...