Это странная проблема, и я не могу найти решение. Я использую .net Core 2.1 и последнюю версию EF. У меня есть видовая модель заказов, как это:
public class OrdersFilterViewModel
{
public int? AccountNumber { get; set; }
[Display(Name = "Account Numbers:")]
public IEnumerable<SelectListItem> AccountNumbers { get; set; }
}
Если я создаю общий контекст базы данных, проблем нет. Тем не менее, я получаю повторяющиеся номера счетов в моем списке выбора. Итак, если я попытаюсь сделать Select().Distinct()
, чтобы устранить дубликаты:
[Authorize]
public async Task<IActionResult> FilterOrders(int? account)
{
var accountContext = _context.Order
.Where(m => m.UserID == userId)
.Select(m => m.AccountNumber)
.Distinct();
var vm = new OrdersFilterViewModel
{
...
AccountNumbers = new SelectList(await accountContext.ToListAsync(), "AccountNumber", "AccountNumber", account),
}
Или я пытаюсь это:
[Authorize]
public async Task<IActionResult> FilterOrders(int? account)
{
var accountContext = _context.Order
.Where(m => m.UserID == userId);
var vm = new OrdersFilterViewModel
{
...
AccountNumbers = new SelectList(await accountContext.Select(m => m.AccountNumber).Distinct().ToListAsync(), "AccountNumber", "AccountNumber", account),
}
Независимо от того, что я пытаюсь, в том числе удалить ожидание и сделать что-то вроде этого:
AccountNumbers = new SelectList(accountContext, "AccountNumber", "AccountNumber", account).Distinct().ToList(),
Нет ошибок, но он постоянно меняет мой тип с [0] = {Microsoft.AspNetCore.Mvc.Rendering.SelectListItem}
на Data = {System.Collections.ListDictionaryInternal}
(который я вижу при отладке) и поэтому бомбит при переходе к представлению с:
GET https://localhost:44380/orders/filterorders?account=464402 500
send @ jquery.js:9600
ajax @ jquery.js:9206
(anonymous) @ Orders?account=464402:546
dispatch @ jquery.js:5183
elemData.handle @ jquery.js:4991
Orders?account=464402:563 Dynamic content load failed.
Однако проблема, похоже, не в вызове Distinct()
, а в том, что он дает мне разные идентификаторы заказа, а не отдельные номера счетов. Похоже, проблема связана с вызовом Select()
.
Кто-нибудь знает, что я делаю не так?
Обновление: Я создал AccountNumbers
и AccountNumbers2
SelectList
с. Оба точно такие же, как указано выше, за исключением того, что AccountNumbers2
имеет Select(m => m.AccountNumber)
Я даже удалил часть userId
на данный момент. Итак, самое необходимое для моей проблемы:
var accountContext = _context.Account;
var accountContext2 = _context.Account.Select(m => m.AccountNumber);
...
AccountNumbers = new SelectList(await accountContext.Distinct().ToListAsync(), "AccountNumber", "AccountNumber", account),
AccountNumbers2 = new SelectList(await accountContext2.Distinct().ToListAsync(), "AccountNumber", "AccountNumber", account),
AccountNumbers:
![enter image description here](https://i.stack.imgur.com/rS0pl.jpg)
AccountNumbers2:
![enter image description here](https://i.stack.imgur.com/m50yv.jpg)