我无法从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
答案 0 :(得分:1)
我假设你从查询的末尾删除了你的异类。
实际上就此而言,我看不出你怎么能得到重复的订单,因为你在查询中什么都不做,除了选择你的查询是在数据库的一个表上,所以你已经无法得到同一行多次。
你称之为“重复”是什么?如果你的意思是两行具有相同的值,除了它们的ID根本不重复,那只是两个不相关的行,具有相同的值。 。
另一方面,如果你的意思是你期望它们是平等的,因为你在选择之后扔了.Distinct而你只使用了OrderId和ShipCity,那里有重复(我真的不是看看为什么一个名为OrderId的列在一个订单表中应该有重复,但这是另一个问题)然后由于你没有选择OrderId和ShipCity仍然无法工作,你选择一个新的SelectListItem,如果你创建了两个引用类型相同的值,它们在.NET中不相等,它们需要是相同的实例才能相等,而不是两个具有不同值的实例。
根据您的评论进行编辑:
var query = _dbContext.Orders
.ToList()
// Group them by what you want to "distint" on
.GroupBy(item=>item.ShipCity)
// For each of those groups grab the first item, we just faked a distinct)
.Select(item=>item.First())
.Select(x => new SelectListItem
{
Text = x.OrderID.ToString(),
Value = x.ShipCity
})
.OrderBy(y => y.Value)
.Distinct();