【问题标题】:Distinct not working (ASP Awesome control)不同的不起作用(ASP Awesome 控件)
【发布时间】:2021-09-22 18:34:10
【问题描述】:

我正在使用 JSON 为下拉列表发送一个 ASP Awesome Combobox 条目。

代码如下:

 public ActionResult GetEngineerData()
    {
        var items = db.Results.Where(x=>x.Engineer != null).Select(o=>new KeyContent(o.Engineer,o.Engineer)).Distinct()
                    

        return Json(items);
    }

这并没有提供一个不同的列表,而是有很多重复的。 我也试过这样做(在 Select KeyContent 代码之前定位不同):

public ActionResult GetEngineerData()
        {
            var items = db.Results.Where(x=>x.Engineer != null).Distinct().Select(o=>new KeyContent(o.Engineer,o.Engineer))
                    

        return Json(items);
    }

感谢您的帮助。

【问题讨论】:

  • 它是从包含大约 100 项“工程师”列的表中提取的。此列表中只有大约 4 个唯一项目,但在运行时,下拉列表中会填充“工程师”列中表中的所有条目

标签: c# asp.net-mvc linq-to-entities


【解决方案1】:

创建new KeyContent 时,您会获得不同 个实例 - 不同的对象,即使它们的值相同。
这就是为什么您的第一个代码不起作用的原因。

在您的第二个中,您检查Results 是否不同,对于每个不同的,您选择Engineer

如果你想要不同的工程师,试试这个:

     public ActionResult GetEngineerData()
     {
        var items = db.Results
            .Where(x=>x.Engineer != null)   //eliminate empty values
            .Select(x=>x.Engineer)          //select only the engineer-item
            .Distinct()                     //remove _duplicate engineers_ from the list
            .Select(x=>new KeyContent(x,x));//for each unique engineer, create a KeyContent instance
                    

        return Json(items);
    }

【讨论】:

  • 你的回答有道理,但还是不行。我现在收到以下错误“LINQ to Entities 仅支持无参数构造函数和初始化程序”
  • 很好奇原始代码中没有发生这种情况。尝试在.Distinct() 之后添加.AsEnumerable()
  • 我在 Select(x=>x.Engineer) 之后添加了一个 ToList() 以规避 LINQ to entity 问题并修复了它。感谢您的帮助!
猜你喜欢
  • 2017-01-18
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多