任何人都可以告诉我为什么这个LINQ语句总是返回一行,即使没有匹配的数据?如何让LINQ在没有数据的情况下返回零行?
var returnList = listProductSubAreas
.Where(o => o.ProductID == productID && o.ProductAreaID == productAreaID)
.OrderBy(o => o.ProductAreaName)
.Select(o => new SelectListItem
{
Text = o.SubProductArea,
Value = o.SubProductArea
}).DistinctBy(o => new { o.Text, o.Value }).ToList();
答案 0 :(得分:0)
我将您在示例中提供的代码放在一起。当放置在Controller中时,它的行为完全正常(使用MoreLinq),返回项目数为0.
您能否确认是这种情况,如果是,请显示您可能已经使用的可能影响选择过程的任何其他代码(即搜索条件值)或初始listProductSubAreas项目值。
public class HomeController : Controller
{
public ActionResult Index()
{
List<ProductSubArea> listProductSubAreas = new List<ProductSubArea>();
int productID = 3;
int productAreaID = 3;
ProductSubArea psa1 = new ProductSubArea();
psa1.ProductID = 1;
psa1.ProductAreaID = 1;
psa1.ProductAreaName = "Test1";
psa1.SubProductArea = "SubTest1";
listProductSubAreas.Add(psa1);
ProductSubArea psa2 = new ProductSubArea();
psa2.ProductID = 2;
psa2.ProductAreaID = 2;
psa2.ProductAreaName = "Test2";
psa2.SubProductArea = "SubTest2";
listProductSubAreas.Add(psa2);
var returnList = listProductSubAreas
.Where(o => o.ProductID == productID && o.ProductAreaID == productAreaID)
.OrderBy(o => o.ProductAreaName)
.Select(o => new SelectListItem { Text = o.SubProductArea, Value = o.SubProductArea })
.DistinctBy(o => new { o.Text, o.Value })
.ToList();
int count = returnList.Count();
return View();
}
}
public class ProductSubArea
{
public int ProductID { get; set; }
public int ProductAreaID { get; set; }
public string ProductAreaName { get; set; }
public string SubProductArea { get; set; }
}
答案 1 :(得分:0)
我试过这个:
var returnList = items
.Where(o => o.ProductID == productID && o.ProductAreaID == productAreaID)
.OrderBy(o => o.ProductAreaName)
.Select(o => new SelectListItem
{
Text = o.SubProductArea,
Value = o.SubProductArea
}).Distinct().ToList();
我收到零件。
我认为这是DistinctBy,这是你的问题。 你正在使用它的哪个实现?