Using .Contains() on a property in a list

白昼怎懂夜的黑 提交于 2019-11-28 11:26:55

Sure.

foreach(Activity activity in ActivityList.Where(a => a.Id == GuidToCompare) )
{        
    //Code here
}

But since Id implies there will be at most 1 activity:

//var act = ActivityList.Where(a => a.Id == GuidToCompare).SingleOrDefault(); // clearer
var act = ActivityList.SingleOrDefault(a => a.Id == GuidToCompare);          // shorter
if (act != null)
{
    //Code here
}

Take a look to the LINQ, You can replace with it your code by: ActivityList.Any(i => i.Id == GuidToCompare);

foreach(var activity in ActivityList.Where(p=>p.Id == GuidToCompare))
{

// Code here

}

to find all activity objects with the given GUID you can use:

var results = ActivityList.FindAll(item => item.ID == GuidToCompare);

If you are looking for only one Id one time, there is no more efficient way.

If you are looking for Ids multiple times you can build a HashSet :

var activityIdsQuery = from a in ActivityList
                       select a.Id;
HashSet<Guid> activityIds = new HashSet<Guid>(activityIdsQuery);

//Use the hashset
activityIds.Contains(id);

If you need to find an instance of activity you can build a Dictionary (works only if Id is unique) :

Dictionary<Guid, Activity> activities = ActivityList.ToDictionary(a => a.Id);

Others solution using Linq with Where/FirstOrDefault/Any on the Id won't be more efficient than yours.

I Havent tested it but im fairly sure this should work:

if ( ActivityList.Any ( a => a.Id == GuidToCompare ) ) {
    // TODO - Exists.
}

MSDN Any : http://msdn.microsoft.com/en-us/library/bb534972.aspx

Just to offer you all the ways you can write this query with Linq

var result = (from activity in activityList
              where activity.Id == GuidToCompare
              select activity ).FirstOrDefault();

if(result != null)
    /* Code here */

Now, it is up to you to choose the more readable snippet ;)

For those who can't use LINQ:

List<Activity> ActivityList = new List<Activity>();

foreach (Activity activity in ActivityList.FindAll(delegate(Activity a)
    {
        return a.Id == GuidToCompare;
    }))
{
    //Code here
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!