0

以下のクエリを使用して、 を含むすべてのレコードを取得しています。すべてのレコードをのリストとしてSubCategoryName == subCatName返したいと考えています。問題は、コードを実行すると、すべてではなく 1 つの int(record) しか返されないことです。そのsubCatNameを持つすべてのレコードを返すようにするにはどうすればよいですか? カウント = 1 を返し、容量は 4 です。つまり、最初の [0] だけが実際の製品 ID に = であり、残りはゼロを返しますか?ProductIDintsint[4]

   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;
    }
4

2 に答える 2

2

ダニエルがすでに述べたように、コードは機能するはずです。しかし、大文字と小文字を区別しないか、空白を無視することを期待しているかもしれません。したがって、これはより寛容です。

subCatName = subCatName.Trim();
List<int> productIDs = _db.ProductSubCat
     .Where(x => String.Equals(x.SubCategory.SubCategoryName.Trim(), subCatName, StringComparison.OrdinalIgnoreCase))
     .Select(p => p.ProductID)
     .ToList();
于 2013-03-01T16:31:42.733 に答える
2

これは、ここで予想される動作のようです。Where述語を満たすレコードが 1 つだけではないことをどうやって知ることができますか。

コードは正しいですが、比較を正規化する必要がある場合があります。

x => x.SubCategory.SubCategoryName == subCatName

たとえば、特定のケースを使用するには:

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

トリムを検討することもできます。

于 2013-03-01T16:28:53.110 に答える