为了账号安全,请及时绑定邮箱和手机立即绑定

Distinct() Select() 改变SelectList .net Core中的类型

Distinct() Select() 改变SelectList .net Core中的类型

C#
MMMHUHU 2022-11-21 21:47:20
这种奇怪的问题,我想不出解决办法。我正在使用 .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 列的列表。


查看完整回答
反对 回复 2022-11-21
?
心有法竹

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以稍后重新访问这个......


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号