3

カスタム関数を使用して、圧縮された文字列内の特定の一致するデータを見つける 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 ループとして書き直すのが最善の方法です。

どんな助けでも大歓迎です。ありがとう

4

3 に答える 3

5

忘れないTakeTakeWhile

TakeWhileから...

指定された条件が true である限り、シーケンスから要素を返し、残りの要素をスキップします。

于 2011-11-11T16:13:17.223 に答える
4

First()FirstOrDefault()Single()またはSingleOrDefault(): _

MarketDataType result = queryMarkets.FirstOrDefault();

(これらのメソッドはすべて、結果が 1 つだけの場合は同じ結果を返します。ゼロまたは複数の結果の処理が異なります。)

于 2011-11-11T15:52:28.473 に答える
1

First()の代わりにToList()使用するだけIEnumerableで、最初の一致後に評価が停止します。

于 2011-11-11T15:53:35.827 に答える