3 anahtar kelime, Ürün ve Anahtar KelimeÜrünüm var. I filtre deneyinlinq liste listemize uyan her şeyi içeriyor.
- "", A ve B ürünleri iade
- sadece B ürünü
, "matris" filtre dönmek deneyin ama "matris" filtrelerken Ben de B ve A alırım. Sadece B kaydına ihtiyacım var. kodu
:
var keywordTermList = ("the matrix").Split(' ');
db.Products
.Where(product => product.ProductKeywords.All(k => keywordTermList.Contains(k.Keyword.Name)))
Kelime Tablo
+-----------+---------+ | KeywordId | Name | +-----------+---------+ | 1 | awakens | | 2 | force | | 3 | the | | 4 | matrix | +-----------+---------+
ProductKeyword Tablo
+------------+-----------+ | KeywordId | ProductId | +------------+-----------+ | 3(the) | A | | 2(force) | A | | 1(awakens) | A | | 3(the) | B | | 4(matrix) | B | +------------+-----------+
Ürün Tablo A ve B kaydı bulunur.
Bunun için nasıl giderim? "Matrisi" filtrelediğimde yalnızca B'yi nasıl alabilirim. Eğer alt küme tam surperset
var query = products.Where(p => !keywordListTerm.Except(p.ProductKeywords.Select(pk => pk.Name)).Any());
eşleştirmek istiyorsanız
'var keywordTermList = searchString.Split ('') .Where (t =>! Ignore.Contains (t)) toList();' - 'ignore'' '' bir '' listesi "an", "the", ...} 've görmezden gelmek istediğiniz her şey. –
Evet, biliyorum. Bu sadece örnek kayıtlar. – tsubasaetkisi
Yukarıdakiler gerçek sorgunuz gibi görünmüyor, çünkü daha fazla veriyi (örneğin, B ürününün üçüncü kelimesi varsa) daha fazla kayıt döndürmekten daha çok filtrelemesi olasıdır. –