C# 对列表中的属性使用.Contains()
我有一份活动清单。在Activity类中有一个ID属性(为了参数起见是Guid)。我想检查此列表中是否有Guid为的活动。与此相反:C# 对列表中的属性使用.Contains(),c#,.net,list,contains,C#,.net,List,Contains,我有一份活动清单。在Activity类中有一个ID属性(为了参数起见是Guid)。我想检查此列表中是否有Guid为的活动。与此相反: foreach(Activity activity in ActivityList) { if(activity.Id == GuidToCompare) //Code here } 如果我只有一个guid列表(而不是一个活动列表)并使用.Contains(),是否有一种更有效的方法来实现与我相同的结果 我有一个名为ActivityAnd
foreach(Activity activity in ActivityList)
{
if(activity.Id == GuidToCompare)
//Code here
}
如果我只有一个guid列表(而不是一个活动列表)并使用.Contains(),是否有一种更有效的方法来实现与我相同的结果
我有一个名为ActivityAndPO的结构列表。此结构中有一个Guid。
我有一张PO的名单。PO类中有一个Guid
我想循环浏览ActivityAndPO列表中的所有对象,其中Guid存在于PO列表中。查看LINQ,您可以将代码替换为:
ActivityList.Any(I=>I.Id==GuidToCompare)代码>当然可以
但是由于Id
意味着最多会有一个活动:
//var act = ActivityList.Where(a => a.Id == GuidToCompare).SingleOrDefault(); // clearer
var act = ActivityList.SingleOrDefault(a => a.Id == GuidToCompare); // shorter
if (act != null)
{
//Code here
}
我还没有测试过它,但我相当肯定它会起作用:
if ( ActivityList.Any ( a => a.Id == GuidToCompare ) ) {
// TODO - Exists.
}
MSDN Any:仅为您提供使用Linq编写此查询的所有方法
var result = (from activity in activityList
where activity.Id == GuidToCompare
select activity ).FirstOrDefault();
if(result != null)
/* Code here */
现在,由您选择可读性更强的代码段;) 如果一次只查找一个Id,没有比这更有效的方法了
如果要多次查找ID,可以构建哈希集:
var activityIdsQuery = from a in ActivityList
select a.Id;
HashSet<Guid> activityIds = new HashSet<Guid>(activityIdsQuery);
//Use the hashset
activityIds.Contains(id);
var activityidskquery=来自活动列表中的
选择a.Id;
HashSet activityIds=新的HashSet(activityIdsQuery);
//使用hashset
activityid.Contains(id);
如果需要查找活动实例,可以构建字典(仅当Id唯一时有效):
Dictionary activities=ActivityList.ToDictionary(a=>a.Id);
其他解决方案使用Id上带有Where/FirstOrDefault/Any的Linq不会比您的更有效。要查找具有给定GUID的所有活动对象,您可以使用:
var results = ActivityList.FindAll(item => item.ID == GuidToCompare);
对于无法使用LINQ的用户:
List ActivityList=new List();
foreach(ActivityList.FindAll中的Activity活动)(委托(活动a)
{
返回a.Id==GuidToCompare;
}))
{
//代码在这里
}
var activityIdsQuery = from a in ActivityList
select a.Id;
HashSet<Guid> activityIds = new HashSet<Guid>(activityIdsQuery);
//Use the hashset
activityIds.Contains(id);
Dictionary<Guid, Activity> activities = ActivityList.ToDictionary(a => a.Id);
var results = ActivityList.FindAll(item => item.ID == GuidToCompare);