2012-06-24 5 views
0

Вопрос о поиске записей во вложенных классах. Вот вырезанная версия моего кода. Надеюсь, это объяснит достаточно! Я использую Visual Web Developer 2010 Express.Поиск вложенных списков классов

Класс

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace API 
{ 
    public class Fixture 
    { 
     public int ID { get; set; } 
     public string Description { get; set; } 
     public List<FixturesMarketData> FixturesMarketData; 

     public Fixture() 
     { 
      FixturesMarketData = new List<FixturesMarketData>(); 
     } 

     public void AddMarket(int _fixtureID, int _marketID, string _MarketName) 
     { 
      FixturesMarketData.Add(new FixturesMarketData (_fixtureID, _marketID, _MarketName)); 
     } 

     public string ListMarkets() 
     { 
      string strReturn=""; 
      foreach (var item in FixturesMarketData) 
      { 
       strReturn = strReturn + "<br />" + item.marketDescription + " - " + item.marketID + " - " + item.fixtureID; 
      } 
      return strReturn; 
     } 
    } 

    public class FixturesMarketData 
    { 
     public int fixtureID { get; set; } 
     public int marketID { get; set; } 
     public string marketDescription { get; set; } 

     public FixturesMarketData(int _mdfixtureID, int _mdmarketID, string _mdmarketDescription) 
     { 
      fixtureID = _mdfixtureID; 
      marketID = _mdmarketID; 
      marketDescription = _mdmarketDescription; 
     } 
    } 
} 

Главная Код

_fixtures = new List<Fixture>(); 
_fixtures.Add(new Fixture { ID = 1234, Description = 'This is a test' }); 

int index = _fixtures.FindIndex(Fixture => Fixture.ID.Equals(1234)); 
_fixtures[index].AddMarket(1234, 5678, 'This is a test market'); 
AddToOutputString(_fixtures[index].ListMarkets()); 

Так в основном это приведет: Крепеж:

ID= 1234; 
Description=This is a test; 
FixturesMarketData 
FixtureID=1234; 
MarketID=5678; 
marketDescription=This is a test market; 

Как сделать находку на FixturesMarketData для того, где рынок ид равна 5678?

я могу сделать это так:

var index=-1; 
      foreach (var item in _fixtures) 
      { 
       index = item.FixturesMarketData.FindIndex(entry => entry.marketID.Equals(_marketId)); 
       if(index!=-1) 
       { 
        break; 
       } 
      } 

, но я предполагаю, что там должен быть способ сделать это в лямбда-Find стиле

Спасибо!

+0

см. [Мой ответ] (http://stackoverflow.com/a/11117930/201088) –

ответ

1
var enumerable=_fixtures.Where(x=>x.FixturesMarketData.Any(x=>x.marketId==5678)); 

теперь, если вы надеетесь найти много таких приспособлений вы можете сделать

enumerable.ToList(); 

, если вы хотите только первый затем

enumerable.FirstOrDefault(); 

и если только один прибор может быть найден, то

enumerable.SingleOrDefault(); 

Примечание: здесь Значение по умолчанию означает, что если не найдено return NULL еще будет ошибка, вызванная

+0

Отлично. Огромное спасибо. Именно то, что мне нужно! –

Смежные вопросы