Zoeken naar geneste klassenlijsten

Vraag over het zoeken naar records in geneste klassen. Hier is een kortere versie van mijn code. Hopelijk verklaart het genoeg! Ik gebruik Visual Web Developer 2010 Express.

Klasse

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

namespace API
{
    public Klasse Fixture
    {
        public int ID { get; set; }
        public string Description { get; set; }
        public List FixturesMarketData;

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

        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 + "
" + item.marketDescription + " - " + item.marketID + " - " + item.fixtureID; } return strReturn; } } public Klasse 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; } } }

Hoofd code

_fixtures = new List();
_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());

Dus eigenlijk zou dit resulteren in: armatuur:

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

Hoe doe ik een vondst op FixturesMarketData voor waar markt-id gelijk is aan 5678?

Ik kan het als volgt doen:

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

maar ik vermoed dat er een manier moet zijn om het in Lambda Find-stijl te doen

Bedankt!

0
ja ru de
toegevoegd de auteur Eren Ersönmez, de bron

1 antwoord

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

nu, als je hoopt veel van dergelijke armaturen te vinden die je kunt doen

enumerable.ToList();

als je alleen de eerste wilt

enumerable.FirstOrDefault();

en als er dan maar één fixture te vinden is

enumerable.SingleOrDefault();

Opmerking: hier Standaard betekent als niet gevonden retour NULL anders zal er een fout worden gegenereerd

1
toegevoegd
Perfect. Heel erg bedankt. Precies wat ik nodig had!
toegevoegd de auteur Richard Whitehouse, de bron