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

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 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()通话有关。


有人知道我做错了什么吗?



查看完整描述

2 回答

?
皈依舞

TA贡献1570条经验 获得超3个赞

问题是,当您使用 select 时,您定义了您想要返回的内容

Select(m => m.AccountNumber)

这将仅返回 AccountNumber 列的列表。


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

TA贡献1599条经验 获得超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 关注
  • 7 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信