मेरे पास एक वर्ग उत्पाद है

public Guid Id { get; set; }
    
public string Name { get; set; }
    
public string Color { get; set; }

रंग एक स्ट्रिंग हो सकता है जैसे "नीला, लाल, हरा" या "लाल, भूरा" आदि।

और मेरे पास उदाहरण के लिए इन वर्गों का संग्रह या गणना है

Ienumerable<Product> Products

इसके अलावा मेरे पास रंगों का एक और स्ट्रिंग संग्रह है जैसे

List<string> colorsForFiltering = new List<string>() { Blue, Yellow, Brown}

मैं कलर प्रॉपर्टी थ्रो linq क्वेरी का उपयोग करके उत्पाद को कैसे फ़िल्टर कर सकता हूं? मैंने सहित कई विकल्पों की कोशिश की

Products = Products.Where(x => colorsForFiltering.Contains(x.Color));

और बहुत सारे। मुझे पता है कि यह प्रश्न गलत है। मुझे यकीन है कि मैं साइकिल का उपयोग करके इस समस्या को हल कर सकता हूं। लेकिन मैं जानना चाहता था कि linq का उपयोग करके ऐसा करना संभव है या नहीं। दुर्भाग्य से मुझे इसका उत्तर नहीं मिल रहा है। आपका अग्रिम में ही बहुत धन्यवाद!

-1
Alazarn Freeman 1 सितंबर 2021, 17:51

2 जवाब

सबसे बढ़िया उत्तर

जॉनाथन बार्कले ने टिप्पणियों में इस मुद्दे को हल किया

x => colorsForFiltering.Any(x.Color.Contains)

मैंने अभी Any के बजाय All का उपयोग किया है

-2
Alazarn Freeman 1 सितंबर 2021, 15:32

आदर्श रूप से आपको Color को IEnumerable<string> में बदलना चाहिए, लेकिन जो आपके पास है उससे आप यह कर सकते हैं:

Products = Products.Where(x => colorsForFiltering.Intersect(x.Color.Split(',', StringSplitOptions.TrimEntries).Any());

ध्यान दें कि यह लगभग निश्चित रूप से SQL में अनुवाद योग्य नहीं होगा, इसलिए आपको इसे स्मृति में करना होगा। एक विकल्प जो SQL-अनुवाद योग्य है वह फ़िल्टर रंगों के माध्यम से लूप करना होगा:

var results = colorsForFiltering.SelectMany(c=>
        Products.Where(x => x.Color.Contains(c))
    );

यह फुलप्रूफ भी नहीं है, क्योंकि यदि आपके पास कोई रंग है जो किसी अन्य रंग के विकल्प हैं (जैसे "ब्लू-ग्रीन", तो Contains सबस्ट्रिंग से मेल खाएगा, लेकिन यह SQL में अनुवाद योग्य है

0
D Stanley 1 सितंबर 2021, 15:44