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;

マーケット ID が 5678 の FixturesMarketData を検索するにはどうすればよいですか?

私はこのようにすることができます:

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

しかし、ラムダ検索スタイルでそれを行う方法があるに違いないと思います

ありがとう!

4

1 に答える 1

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

今、あなたがそのような多くの備品を見つけたいなら、あなたはすることができます

enumerable.ToList();

最初のものだけが必要な場合は

enumerable.FirstOrDefault();

フィクスチャが1つしか見つからない場合は、

enumerable.SingleOrDefault();

注:ここでデフォルトとは、見つからない場合はリターンを意味し、そうでない場合はNULLエラーがスローされます

于 2012-06-24T10:30:18.197 に答える