关于字典的linq查询的where子句?

时间:2010-12-21 09:28:15

标签: c# dictionary linq-to-objects where-clause

我已经解决了它没有列出与spawn字典中的错误字段相关的数据的问题,但我仍然想问我接近它的方式是否正常? < / p>

我有几个复选框,如果为true,则应添加检查项目状态并将其包含在列表中。

所以不知道该怎么做,这就是我想出来的:

        HashSet<int> status = new HashSet<int>();
        if (OptionsForm.filterPlayer.Checked) status.Add(0);
        if (OptionsForm.filterEnemy.Checked) status.Add(1);
        if (OptionsForm.filterSummon.Checked) status.Add(2);
        if (OptionsForm.filterNPC.Checked) status.Add(3);
        if (OptionsForm.filterObject.Checked) status.Add(4);
        if (OptionsForm.filterMonster.Checked) status.Add(5);
        if (OptionsForm.filterGatherable.Checked) status.Add(6);
        if (OptionsForm.filterUnk.Checked) status.Add(7);

        var query = from SpawnList item in spawnEntities.Values
                    where status.Contains(item.Status)
                    orderby item.Name ascending
                    select item;

但是目前它并没有归还我应该返回的任何错误或项目。

spawnEntities是一个带有uint的字典,SpawnList。

SpawnList是一个简单的类:

public class SpawnList
{
    public string Name { get; set; }
    public int Status { get; set; }
    // some more data not needed for the question
}

2 个答案:

答案 0 :(得分:3)

  

这是我的错误,地位就是   字典在1字段中是错误的,我   没有得到我想要的东西   列出我注意到的所有数据嘿,   但是我可以这样做吗   ?

为了避免这样的错误,我会使用枚举而不是整数 - 只需定义

enum SomeStatus
{
    Player,
    Enemy,
    <.etc.>
}

并更改

public int Status { get; set; }

进入

public SomeStatus Status { get; set; }

答案 1 :(得分:0)

我对之前回答的评论进一步解释。您可以使用Flags属性,这样可以更轻松地检查您的状态。

[Flags]
enum YourEnum
{
     none,
     Val1,
     Val2,
     Val3,
     Val4,
}

将您的状态设置为:

public YourEnum Status {get; set;}

创建您的组合状态,如:

YourStatus status = YourEnum.None;
if(OptionsForm.filterPlayer.Checked) status = status | YourEnum.Val1;
if(OptionsForm.filterEnemy.Checked) status = status | YourEnum.Val2;
<etc>

你会得到像这样的linq:

    var query = from SpawnList item in spawnEntities.Values
                where status & itemStatus != YourEnum.None
                orderby item.Name ascending
                select item;

在此处详细了解flags属性:http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx