为什么LINQ选择始终返回一行

时间:2015-02-28 22:15:12

标签: c# linq

任何人都可以告诉我为什么这个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();

2 个答案:

答案 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,这是你的问题。 你正在使用它的哪个实现?