как отсортировать список значений объекта в объекте - PullRequest
0 голосов
/ 03 ноября 2018

Это запрос, который я использую для извлечения элементов и деталей каждого элемента с определенным идентификатором

public class ItemModel 
{
   public int ItemSeq{get;set}
   public string ItemName{get;set;}
   public double? Amount{get;set;}
}
public class SampleModel
{
    public string Id{ get; set; }
    public string Code{ get; set; }
    public List<ItemModel> Items{ get; set; }
}

public List<SampleModel> GetItems(string id)
{

    var items= _context.ItemTable.Where(t => t.Id== id).ToList<SampleModel>();
    return list;
}

Чтобы прояснить требование, есть две таблицы ItemTable и ItemDetailTable И Id, представляющие собой ItemTable первичный ключ и внешний ключ в ItamDetailTable, а ItemDetailTable может иметь несколько значений для одного ID и приведенный выше запрос возвращает элемент и подробности из ItemDetailTable с определенным идентификатором. Я хочу получить отсортированное значение детализации элемента со значением Amount. Есть ли способ сделать это?

Пример данных

ItemTable

Id     Code
1      Code1
2      Code3

ItemDetailTable

Id    ItemSeq    ItemName    Amount
1     1          ABC1        200
1     2          ABC2        129
1     3          ABC3        549
2     1          DEF1        265
2     2          DEf2        970

что я хочу, это когда значение Id равно 1, возвращаемое значение равно

Id:   1
Code: Code 1
Items:[
    0:{
     ItemSeq:  2
     ItemName: ABC2
     Amount:   129
    }
   1:{
     ItemSeq:  1
     ItemName: ABC1
     Amount:   200
    },
   1:{
     ItemSeq:  3
     ItemName: ABC3
     Amount:   549
    }
] 

1 Ответ

0 голосов
/ 03 ноября 2018

Вам необходимо вернуть отсортированный список ItemModel, передав параметр id методу GetItems.

public List<ItemModel> GetItems(string id)
{
    var items = _context.SampleTable.Where(t => t.Id == id).SelectMany(x => x.Items).Where(p => p.Amount != null).OrderBy(x => x.Amount).ToList();
    return items.ToList();
}

Edit:

Приведенный выше запрос возвращает элемент и сведения из ItemDetailTable с указанным идентификатором

Вам также необходимо добавить свойство внешнего ключа в ItemDetailTable, например

public class ItemDetailTable
{
    public int ItemSeq { get; set; }
    public string ItemName { get; set; }
    public double? Amount { get; set; }

    public string Id { get; set; }   //Foreign key of ItemTable
}


public ItemTable GetItems(string id)
{
    //Get "ItemTable" record from database
    var item = _context.ItemTable.Where(x => x.Id == id).SingleOrDefault();

    //Retrieve its "Items" and sort by ascending order
    var itemDetails = item.Items.Where(x => x.Id == id).Where(p => p.Amount != null).OrderBy(x => x.Amount).ToList();

    //Preare a new "ItemTable" object to return
    ItemTable itemTable = new ItemTable
    {
        Code = item.Code,
        Id = item.Id,
        Items = itemDetails
    };

    //Return new "itemTable" with sorted list of "ItemDetailTable"
    return itemTable;
}

Редактировать 2:

public ItemTable GetItems(string id)
{
    var result = (from i in _context.ItemTable
                  where i.Id == id
                  let sorting = i.Items.Where(x => x.Id == id).Where(x => x.Amount != null).OrderBy(x => x.Amount).ToList()
                  select new ItemTable
                  {
                      Id = i.Id,
                      Code = i.Code,
                      Items = sorting
                  }).FirstOrDefault();   //Or => SingleOrDefault

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...