C# 为什么LINQ Select总是返回一行

C# 为什么LINQ Select总是返回一行,c#,linq,C#,Linq,有谁能告诉我为什么这个LINQ语句总是返回一行,即使没有匹配的数据?如何让LINQ返回零行,而不返回任何数据 var returnList = listProductSubAreas .Where(o => o.ProductID == productID && o.ProductAreaID == productAreaID) .OrderBy(o => o.ProductAreaName) .Select(o => new SelectListItem

有谁能告诉我为什么这个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();

我已经将您在示例中提供的代码组合在一起。当放置在控制器中时,它的行为与使用MoreLinq时完全相同,返回的项计数为0

您是否可以确认这种情况,如果是,请显示您可能使用过的可能影响选择过程的任何其他代码,即搜索条件值或初始ListProductSubreas项值

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; }
}
我试过这个:

        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();
我没有收到任何退货

我想这是你的问题所在。
您使用的是它的哪个实现???

如果确实没有任何数据,那么应该返回0行。如果只使用Where调用会发生什么?查询Where的第一部分的结果如何????它是空的吗?我刚刚尝试添加&&o.SubductArea==,但它仍然返回一行。我很好奇,这个不存在的数据是什么样子的?单行包含什么?计数为1。位置0处的项被选中=false,Text=,Value=问题是实际返回了数据。我添加了以下where子句来修复此问题:&&o.SubProductArea.Trim.Length!=我将把你的答案标记为正确。结果表明,SubFactorArea字段中返回了一些带有空字符串的数据。解决方案是将以下代码添加到where子句:&&o.SubProductArea.Trim.Length!=0