首页 文章

Where子句问题

提问于
浏览
-4

所以我有一个自定义对象列表

List<Quest> m_quests = new List<Quest>();

在另一个类中,我尝试查询它

var CurentQuests = from a in gLogic.m_quests
                                   where a.m_hero == m_heronbr
                                   && a.m_complete != 100f
                                   select a;

但似乎没有检查 WHERE&& 子句,查询返回完整列表 . 我尝试过不同的变体 a.m_hero.equals(m_heronbr)like . 这是自定义对象的问题吗?


额外信息 . “任务”列表包含来自自定义类Quest的项目,它只存储有问题的变量,例如m_hero == int和m_complete == Float

1 回答

  • 0

    我会说你的where子句没有任何问题,可以在这里证明:

    public class Quest
    {
        public int m_hero { get; set; }
        public double m_complete { get; set; }
    }
    
    private static void Main()
    {
        const int m_heronbr = 10;
    
        List<Quest> m_quests = new List<Quest>
        {
            new Quest {m_complete = 50, m_hero = m_heronbr},
            new Quest {m_complete = 75, m_hero = m_heronbr},
            new Quest {m_complete = 100, m_hero = m_heronbr}
        };
    
        var curentQuests =
            from a in m_quests
            where a.m_hero == m_heronbr
                  && a.m_complete != 100
            select a;
    
        Console.WriteLine(curentQuests.Count());
    }
    

    输出:

    2

    最有可能的是,正如John Saunders所指出的,问题与你的浮点比较有关 . 如果您使用 m_hero 进行任何数学计算,很可能会遇到舍入错误 .

    尝试这样的事情:

    var curentQuests = from a in m_quests
                       where a.m_hero == m_heronbr
                       && Convert.ToInt32(a.m_complete) != 100
                       select a;
    

相关问题