2012-05-24 15 views
13

मैं निम्नलिखित व्यापार वस्तुओं:एक और सूची सी # से एक सूची फ़िल्टर

public class ItemCategoryBO 
    { 
     public string ItemCategory { get; set; } 
     public string Title { get; set; } 
    } 

    public class ItemBO 
    { 
     public int ItemId { get; set; } 
     public string Title { get; set; } 
     public string ItemCategory { get; set; } 
    } 

    List<ItemCategoryBO> categoryList = new List<ItemCategoryBO>(); 

    ItemCategoryBO itemCategory = new ItemCategoryBO(); 
    itemCategory.ItemCategoryCd = "CARS"; 
    itemCategory.Title = "Cars"; 

    ItemCategoryBO itemCategory2 = new ItemCategoryBO(); 
    itemCategory.ItemCategoryCd = "PLANES"; 
    itemCategory.Title = "Planes"; 

    categoryList.Add(itemCategory); 
    categoryList.Add(itemCategory2); 

    List<ItemBO> itemList = new List<ItemBO>(); 

    ItemBO item1 = new ItemBO(); 
    item1.ItemId = 1; 
    item1.Title = "1st item"; 
    item1.ItemCategoryCd = "OTHER"; 

    ItemBO item2 = new ItemBO(); 
    item2.ItemId = 2; 
    item2.Title = "2nd Item"; 
    item2.ItemCategoryCd = "CARS"; 

    ItemBO item3 = new ItemBO(); 
    item3.ItemId = 3; 
    item3.Title = "3rd Item"; 
    item3.ItemCategoryCd = "PLANES"; 

    itemList.Add(item1); 
    itemList.Add(item2); 
    itemList.Add(item3); 

अगर मैं कुछ श्रेणियों की एक सूची है, मैं कैसे वस्तुओं की सूची में एक वर्ग के होते हैं की एक सूची मिल सकता है श्रेणियाँ? (मेरे उदाहरण में, मैं वापस 2 आइटम प्राप्त करना चाहते हैं और 3)

+0

पर इसके बारे में अधिक जानकारी आपकी सूचियां क्या हैं? और यह सुनिश्चित करने के लिए, 'फ़िल्टर द्वारा' क्या मतलब है? –

+1

मैं वास्तव में नीचे दिए गए वोटों को समझ नहीं पा रहा हूं। यह पता लगाने में बहुत मुश्किल नहीं है कि ओपी क्या मांग रहा है। और यदि आप वास्तव में बात करते हैं कि नीचे वोट देने के लिए पर्याप्त बुरा है, तो ओपी को कुछ फीडबैक छोड़ दें ताकि आप उन्हें वोट दे सकें। –

+0

@CharlieKilian वास्तव में समझ में नहीं आता है? टिप्पणी करने के बाद 'यह पता लगाने में बहुत मुश्किल नहीं है कि ओपी क्या मांग रहा है'? –

उत्तर

48

यदि आपके पास एक स्थिति की तरह:

List<ItemBO> items; 
List<ItemCategoryBO> categories; 

और आप करना चाहते हैं एक श्रेणी है कि सभी आइटम प्राप्त करें कि श्रेणियों की सूची में है, तो आप इस का उपयोग कर सकते हैं:

List<ItemBO> result = items.Where(item => 
    categories.Any(category => category.ItemCategory.equals(item.ItemCategory))); 

किसी भी ऑपरेटर स्रोत अनुक्रम विश्लेषण करता है और सच रिटर्न किसी भी तत्व परीक्षण विधेय द्वारा दिए गए संतुष्ट करता है। इस मामले में, यदि श्रेणियों की सूची में ItemCategoryBO है, तो यह सत्य लौटाता है जहां इसकी ItemCategory स्ट्रिंग आइटम की ItemCategory स्ट्रिंग के समान होती है। MSDN

+0

धन्यवाद डायना, अभी भी लिनक के लिए थोड़ा नया है। ठीक वही जो मेरे द्वारा खोजा जा रहा था! – stillsmallvoice

+0

इसे समझाने का सरल तरीका, धन्यवाद !!!! :) – Yaz

+0

मेरे लिए भी काम किया –

1

कुछ LINQ का उपयोग कर

List<ItemBO> itm = new List<ItemBO>; 
//Fill itm with data 

//get selected item from control 

string selectedcategory = cboCatetories.SelectedItem; 

var itms = from BO in itm where itm.ItemCategory = selectedcategory        select itm; 

itms now contains all items in that category 
+0

धन्यवाद मीका, मैंने अपना प्रश्न अपडेट किया है, मैं किसी अन्य सूची के आधार पर गतिशील रूप से फ़िल्टर करने का एक तरीका ढूंढ रहा हूं, न केवल एक आइटम की श्रेणी – stillsmallvoice

2

इस प्रयास करें का प्रयास करें:

List<ItemBO> items = ...; 
ItemCategoryBO category = ...; 

List<ItemBO> filteredItems = items 
    .Where(i => i.ItemCategory.Equals(category)) 
    .FirstOrDefault(); 

ओपी के अद्यतन प्रश्नों के उत्तरों के अपडेट किया गया:

यदि मेरे पास कुछ श्रेणियों की एक सूची है, तो मुझे श्रेणियों की सूची में एक श्रेणी रखने वाली वस्तुओं की एक सूची कैसे मिल सकती है? (मेरे उदाहरण में, मैं आइटम 2 और 3 वापस प्राप्त करना चाहता हूं)

मुझे लगता है कि आपको वास्तव में इसे दो चरणों में करना चाहिए। सबसे पहले, वस्तुओं की अपनी अलग सूची प्राप्त करें। फिर, अपने सामान से, श्रेणियों की अपनी सूची प्राप्त करें। तो:

// First, get the distinct list of items 
List<ItemBO> items = new List<ItemBO>(); 
foreach (var category in categories) 
{ 
    foreach (var item in category.Items) 
    { 
     if (!items.Contains(item)) 
      items.Add(item); 
    } 
} 

// Second, get the list of items that have the category. 
List<ItemBO> filteredItems = items 
    .Where(i => i.ItemCategory.Equals(category)) 
    .FirstOrDefault(); 
+0

मैं श्रेणियों की सूची के लिए यह कैसे कर सकता हूं? – stillsmallvoice

+0

एक डाउनवोट? अच्छा, एलबी –

+0

@CharlieKilian मैं अपना डाउनवोट रद्द कर दूंगा ASAP मैं समझता हूं कि आपका उत्तर क्या जवाब देता है –

1

यहाँ कुछ मैं Linqpad

 
void Main() 
{ 

    var cat1 = new ItemCategoryBO {ItemCategory="c1", Title = "c1"}; 
    var cat2 = new ItemCategoryBO {ItemCategory="c2", Title = "c2"}; 

    var item1 = new ItemBO { ItemId = 1, Title = "item1", ItemCategory="c1"}; 
    var item2 = new ItemBO { ItemId = 1, Title = "item2", ItemCategory="c2"}; 
    var item3 = new ItemBO { ItemId = 1, Title = "item3", ItemCategory="c2"}; 
    var item4 = new ItemBO { ItemId = 1, Title = "item4", ItemCategory="c3"}; 

    var items = new List() {item1, item2, item3, item4}; 
    var categories = new List() {cat1, cat2}; 

    var itemsInCategory = from item in items 
    join category in categories on item.ItemCategory equals category.ItemCategory into itemInCategory 
    from categoryItem in itemInCategory 
    select new {item.Title, item.ItemCategory}; 

    itemsInCategory.Dump(); 
} 

// Define other methods and classes here 
     public class ItemCategoryBO 
     { 
      public string ItemCategory { get; set; } 
      public string Title { get; set; } 
     } 

     public class ItemBO 
     { 
      public int ItemId { get; set; } 
      public string Title { get; set; } 
      public string ItemCategory { get; set; } 
     } 

यह रिटर्न में किया था है:

 
Title, ItemCategory 
item1 c1 
item2 c2 
item3 c2 
संबंधित मुद्दे