【发布时间】:2016-06-04 18:58:52
【问题描述】:
我无法从我的 Lambda 查询中获得不同的“订单”列表。即使我使用关键字Distinct(),它仍然返回重复的选择列表项。
public ActionResult Index()
{
var query = _dbContext.Orders
.ToList()
.Select(x => new SelectListItem
{
Text = x.OrderID.ToString(),
Value = x.ShipCity
})
.OrderBy(y => y.Value)
.Distinct();
ViewBag.DropDownValues = new SelectList(query, "Text", "Value");
return View();
}
有什么建议吗?
更新
对不起,我真的错过了代码中的Distinct()。我现在已将其添加到我的代码中。
我基本上是在尝试获取所有不同的行,其中值相同但 ID 不同。
与此 SQL 查询相同......
SELECT distinct [ShipCity] FROM [northwind].[dbo].[Orders] ORDER by ShipCity
【问题讨论】:
-
您的代码对
Distinct()的调用零次。 -
还有一些使用实体框架时的一般建议(我假设 _dbContext 是 EF 上下文):调用 ToList() 应该是你做的最后一件事。 Single()、First()、Last()、Any()、Count() 等也是如此......你明白了...... EF 足够“聪明”,不会往返 DB,直到它必须.所以...如果您在进行枚举列表的调用之前执行您的 Where()、Select()、OrderBy() 等操作,您的效率将大大提高。我建议您阅读更多有关实体框架的信息。
-
请使用 Distinct 调用发布代码。我们需要了解您尝试或正在尝试实现的目标。
-
大家好,我已经用
Distinct调用更新了我的代码。我真的错过了它,因为我在这里发布问题之前一直在测试它。 -
不要调用
.ToList()首先,您的查询格式应与db.table.Where().OrderBy().Select().Distinct().ToList()类似,否则当您将 .ToList()` 作为您的第一个方法调用时,它会将整个表拉入内存