カスタム関数を使用して、圧縮された文字列内の特定の一致するデータを見つける LINQ ステートメントがあります。
一致するのは 1 つだけです。FOR ループを実行した場合、データが見つかったら「ブレーク」を追加します。ただし、LINQ を使用すると、必要かどうかに関係なく一致を探してすべてのレコードを反復処理するように見えます (これは SQL/サブセットの観点からは理にかなっています)。単一の一致が見つかった後、一致するレコードの検索を続行する必要がないように、WHERE 句を使用します。
FOR ループを使用するようにすべてを書き直すこともできますが、条件が一致した場合に X 回の反復後に検索を停止するように LINQ ステートメントを制限する方法があるかどうかを知りたかったのです。
コードは以下です
IEnumerable<MarketDataType> queryMarkets =
from m in Mdata
where !String.IsNullOrEmpty(m)
let field = m.Split('~')
where (MatchMarket(field[5], BaseDate.AddMilliseconds(DaylightSavings + Convert.ToDouble(field[4])), field[1], racecourse, racedatetime, marketType))
select new MarketDataType()
{
marketId = Convert.ToInt32(field[0]),
marketName = field[1].Replace(ColonCode, ":"),
marketType = field[2],
marketStatus = field[3],
eventDate = BaseDate.AddMilliseconds(DaylightSavings + Convert.ToDouble(field[4])),
menuPath = field[5].Replace(ColonCode, ":"),
eventHeirachy = field[6],
betDelay = Convert.ToInt32(field[7]),
exchangeId = Convert.ToInt32(field[8]),
countryCode = field[9],
lastRefresh = BaseDate.AddMilliseconds(DaylightSavings + Convert.ToDouble(field[10])),
noOfRunners = Convert.ToInt32(field[11]),
noOfWinners = Convert.ToInt32(field[12]),
totalAmountMatched = Convert.ToDouble(field[13]),
bspMarket = (field[14] == "Y"),
turningInPlay = (field[15] == "Y")
};
marketData = queryMarkets.ToList();
IEnumerable オブジェクト MarketDataType の内部を調べて、行が存在する場合は無視されるようにする別の WHERE 句を追加できますか? または、これを foreach/for ループとして書き直すのが最善の方法です。
どんな助けでも大歓迎です。ありがとう