2014-12-20 3 views
0

Я хочу использовать LINQ для поиска группы объектов данных в списке. В настоящее время я просматриваю коллекции, чтобы найти то, что мне нужно.Использование LINQ в списке

Я искал и читал множество примеров в Интернете, но я не могу иметь достаточного смысла, чтобы делать то, что мне нужно.

Объект данных, который я хочу найти, называется «Свойством» в моем коде. Свойство имеет общий список «Атрибут». Атрибут имеет общий список строк, который имеет два элемента, имя и значение.

данных в списке:

Property_Data 
{ 
    Attribute {name="Color" value=""} 
    Attribute {name="Size" value=""} 
    Attribute {name="Width" value=""} 
    Attribute {name="Display" value=""} 
} 

Пример свойства с заселена атрибутов

My_Property 
    Color = black 
    Size = 12 
    Width = 2 
    Display = True 

Вот код я использую, когда я итерацию каждый объект недвижимости, то я перебирать каждый элемент в коллекции Атрибуты, которые ищут атрибут с именем «Display» и значением «True».

foreach (IPropertyData prop_data in Properties) 
    { 
    if (prop_data.Attributes.Find(a => a.Name == "Display").Value == "True") 
    { 
     // do something here 
    }          
    } 

То, что я хочу, чтобы узнать, как искать сбор данных свойств объектов вещь с помощью LINQ, так что я не должен повторять каждое свойство и затем атрибуты объекта.

Вот моя попытка на него:

IEnumerable<IPropertyData> prop_datas = Properties 
     .Where(p => p.Attributes.Where(a => a.Name == "isDisplayable" && a.Value == "True"); 

ответ

1
if(prop_data.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True")) 
{ 
    // Do your work 
} 

Если вы считаете полную коллекцию затем

Properties.ForEach(item=> { 
     if(item.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True")) 
     { 
      // Do your work. 
     } 
}); 

После обновления вашего вопроса

IEnumerable<IPropertyData> prop_datas = Properties 
     .Where(p => p.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True")); 
+0

То, что было после, было способом поиска в коллекции свойств, а не в каждом объекте данных свойств. Я обновил свой вопрос, чтобы включить мою попытку LINQ. Обратите внимание, что я ищу объект «Свойства», а не итерирование каждого свойства. –

+0

Проверьте два обновления, которые я сделал. – dotnetstep

+1

У Jon Skeet есть куча сообщений в блоге, которые называются edulinq, что отлично подходит для того, чтобы действительно увидеть, как работает LINQ. http://codeblog.jonskeet.uk/category/edulinq/. Стоит изучить все эти методы, чтобы они были второй натурой. –

0
var query = 
    from prop_data in Properties 
    where prop_data.Attribute("IsDisplayable") == "True" 
    select prop_data; 

переменная запроса должна теперь содержать все в списке, где его атрибут IsDisplable «True». Если вы хотите просмотреть все найденные элементы, вы можете просто сделать что-то вроде

foreach (var item in query) 
{ 
// item.Attribute("IsDisplayable") = False; 
} 
Смежные вопросы