c# - Distinct() Select() 更改 SelectList .net Core 中的类型
问题描述
这种奇怪的问题,我想不出解决办法。我正在使用 .net core 2.1 和最新版本的 EF。我有一个这样的订单视图模型:
public class OrdersFilterViewModel
{
public int? AccountNumber { get; set; }
[Display(Name = "Account Numbers:")]
public IEnumerable<SelectListItem> AccountNumbers { get; set; }
}
如果我做一个通用的数据库上下文,就没有问题。但是,我的 SelectList 中有重复的帐号。所以,如果我尝试做一个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}
to更改为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()
电话无关,而是给了我不同的订单 ID,而不是不同的帐号。问题似乎与Select()
通话有关。
有人知道我在做什么错吗?
更新:我创建了AccountNumbers
和AccountNumbers2
SelectList
s。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),
解决方案
本着保持我的项目进展的精神......
首先,我删除了对 and 的任何引用,Select(m => m.AccountNumber)
并Distinct()
改为执行以下操作:
AccountNumbers = new SelectList(await accountContext.ToListAsync(), "AccountNumber", "AccountNumber", magic)
.GroupBy(x => x.Text).Select(x => x.First()).ToList(),
我从这里得到了这个想法。看来你可以用 Distinct() 做更复杂的事情,我以后可能会尝试。无论如何,我肯定对其他答案/批评持开放态度,并添加了TODO
一个稍后重新审视这个......
推荐阅读
- javascript - 如何通过无限滚动从redux / react中的api逐步获取数据
- java - Spark以多线程方式使用s3a写入文件
- textures - Vulkan:加载浮点纹理
- audiokit - 背景音频已启用但不需要
- javascript - 如何在Angular中淡入和淡出组件
- node.js - 如何在node.js中使用multer和google drive api将多部分数据从表单上传到google drive?
- javascript - 在使用 JavaScript 填写表单之前,如何防止表单提交?
- python - 如何获得 cartopy 大地测量图的转换数据?
- ios - 需要从 URL 设置图像而不闪烁。阅读描述以了解完整的场景
- excel - 以编程方式打开连接到表格模型的 Excel 文档