LINQ查询出错了

时间:2011-02-22 19:57:16

标签: linq sorting c#-4.0

我有一个类卡,它包含对具有不同卡类型的枚举的引用。枚举定义如下:

 enum Rank
    {
        Ace = 1,
        Two,
        Three,
        Four,
        Five,
        Six,
        Seven,
        Eight,
        Nine,
        Ten,
        Jack,
        King,
        Queen
    }

我有一个LINQ查询,它应该采用List并检查它们是否按顺序排列。这意味着任何两个等级之间的差异只有1。

查询:

List<Card> cards = group.ToList();
cards.Sort(SortComparatorByRank);
List<Card> test = cards.Where((x, idx) =>
            (idx >= 1 && (int)cards[idx - 1].CardRank == (int)x.CardRank - 1 ||
            (idx < cards.Count() - 1 &&
            (int)cards[idx + 1].CardRank == (int)x.CardRank + 1))).ToList();

无论如何运行,我得到了这个结果: items in list after running query...

正如你所看到的,两个和四个应该互相追随???

此查询的列表不包含所有卡片,这就是我需要检查排名顺序等等...

3 个答案:

答案 0 :(得分:5)

不,这并不表示两人和四人应该互相追随。它表明cards中没有三个。

Two由于前面有Ace而过滤了过滤器的第一部分,而Four因为Five后面的bool传递了过滤器的第二部分。

鉴于您正在尝试检查一切是否按顺序排列,听起来您真的想要返回All的内容 - 我建议var valid = cards.Zip(cards.Skip(1), (first, second) => new { first, second }) .All(pair => pair.first.CardRank == pair.second.CardRank - 1); 。你也只想成对,所以我会考虑像:

{{1}}

答案 1 :(得分:0)

 (idx < cards.Count() - 1 &&
 (int)cards[idx + 1].CardRank == (int)x.CardRank + 1))).ToList();

他将四人与五人配对。

答案 2 :(得分:0)

在您对Cards.Sort的调用中,您正在执行排序,但未将新列表设置回卡指针。

尝试做一张牌= cards.Sort(在你的代码的第二行)。