Linq查询返回1项而不是全部

时间:2013-03-01 16:24:34

标签: c# asp.net linq

我正在使用下面的查询来抓取所有包含SubCategoryName == subCatName的记录,并且我希望将ProductID的所有记录作为ints的列表返回。问题是当我的代码运行时它只返回1 int(记录)而不是全部。如何让它返回具有该subCatName的所有记录?它返回一个count = 1,容量为4.所以它是int[4],但只有第一个[0] =实际产品ID,其余的返回零?

   public List<int> GetPRodSubCats(string subCatName)
    {
        var _db = new ProductContext();

        if (subCatName != null)
        {
            var  query = _db.ProductSubCat
                            .Where(x => x.SubCategory.SubCategoryName == subCatName)
                            .Select(p => p.ProductID);

            return query.ToList<int>();
        }
        return null;
    }

2 个答案:

答案 0 :(得分:2)

这似乎更像是一种预期的行为。你怎么知道你不仅有1条满足Where谓词的记录。

您的代码是正确的,但您可能希望将比较标准化。

x => x.SubCategory.SubCategoryName == subCatName

例如使用特定案例:

x => x.SubCategory.SubCategoryName.ToLower() == subCatName.ToLower()

你也可以考虑修剪。

答案 1 :(得分:2)

正如Daniel已经提到的那样,代码应该可行。但也许你期望它不区分大小写或忽略空格。所以这更宽容:

subCatName = subCatName.Trim();
List<int> productIDs = _db.ProductSubCat
     .Where(x => String.Equals(x.SubCategory.SubCategoryName.Trim(), subCatName, StringComparison.OrdinalIgnoreCase))
     .Select(p => p.ProductID)
     .ToList();
相关问题