使用LINQ检查集合中的唯一值?

时间:2011-08-05 10:47:33

标签: linq

我有以下类定义:

public class PriorityItem
{
    public string uniqueID { get; set; }
    public List<DelegationTask> DelegationTasks = new List<DelegationTask>();
    public List<int> Priorities = new List<int>(); 
}

现在假设我从这个类创建一个列表,如下所示:

List<PriorityItem> pItems = new List<PriorityItem>();

现在我想根据uniqueID属性检查此列表中是否存在项目,如何完成?

例如,我将使用PriorityItem的集合填充列表,但前提是Priority项不存在。要确定它是否存在,我需要使用LINQ检查uniqueID的值。

希望这是有道理的。

2 个答案:

答案 0 :(得分:5)

如果找到符合特定条件的任何项目,则任何linq扩展方法都返回true。您可以按如下方式使用它:

string idToSearchFor = "123"
bool exists = pItems.Any(item => item.uniqueId == idToSearchFor);

如果您的列表包含exists PriorityItem uniqueId,则上述代码"123"将成立。

答案 1 :(得分:0)

存在与Any相同。 Exists比任何更符合SQL术语。 Any和All自然地融合在一起作为一种自然限定词 pair

然而在句子中,“我们有这个独特的身份吗?”也许“存在”在可读性和意图方面更合适。

class Class1
{
    [Test]
    public void Test()
    {
        // initialise list
        var pItems = new List<PriorityItem>(){new PriorityItem(){uniqueID = "1"}, new PriorityItem(){uniqueID = "2"}, new PriorityItem(){ uniqueID = "123"}};
        var IDtoFind = "123";
        var wasFound = pItems.Exists(o => o.uniqueID == IDtoFind);
    }
}

public class PriorityItem
{
    public string uniqueID { get; set; }
    //public List<DelegationTask> DelegationTasks = new List<DelegationTask>();
    public List<int> Priorities = new List<int>();

}