这种奇怪的问题,我想不出解决办法。我正在使用 .net core 2.1 和最新版本的 EF。我有一个这样的订单视图模型:public class OrdersFilterViewModel{ public int? AccountNumber { get; set; } [Display(Name = "Account Numbers:")] public IEnumerable<SelectListItem> AccountNumbers { get; set; }}如果我做一个通用的数据库上下文,就没有问题。但是,我在 SelectList 中得到了重复的帐号。所以,如果我尝试做一个 do aSelect().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), }无论我尝试什么,包括删除 await 和做这样的事情: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 500send @ jquery.js:9600ajax @ jquery.js:9206(anonymous) @ Orders?account=464402:546dispatch @ jquery.js:5183elemData.handle @ jquery.js:4991Orders?account=464402:563 Dynamic content load failed.但是,问题似乎与Distinct()电话无关,而是给了我不同的订单 ID,而不是不同的帐号。问题似乎与Select()通话有关。有人知道我做错了什么吗?
2 回答
皈依舞
TA贡献1851条经验 获得超3个赞
问题是,当您使用 select 时,您定义了您想要返回的内容
Select(m => m.AccountNumber)
这将仅返回 AccountNumber 列的列表。
心有法竹
TA贡献1866条经验 获得超5个赞
本着让我的项目继续前进的精神......
首先,我删除了对 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以稍后重新访问这个......
- 2 回答
- 0 关注
- 203 浏览
添加回答
举报
0/150
提交
取消
