C# 使用linq在列表中的对象内发现重复变量,然后在所述对象中使用包含重复objectId的另一个变量
我是linq的新手,我已经尝试过这个函数,它应该检查重复项。我想做的是检查我的buildingobject列表,以检查任何buildingobject是否包含与列表中另一个buildingobject相同的objectID。最后,我想使用buildingObject的GUID,它有一个副本,并将其打印到我的日志中供用户查看C# 使用linq在列表中的对象内发现重复变量,然后在所述对象中使用包含重复objectId的另一个变量,c#,.net,linq,duplicates,C#,.net,Linq,Duplicates,我是linq的新手,我已经尝试过这个函数,它应该检查重复项。我想做的是检查我的buildingobject列表,以检查任何buildingobject是否包含与列表中另一个buildingobject相同的objectID。最后,我想使用buildingObject的GUID,它有一个副本,并将其打印到我的日志中供用户查看 public class FMBuildingObject { public Int64 ObjectId { get; set; } public str
public class FMBuildingObject
{
public Int64 ObjectId { get; set; }
public string GUID { get; set; }
}
建筑对象更大,但这是我使用的值。
接下来,我将尝试使用BuildingObject,查找重复项,然后打印出GUID。但是,我不知道如何访问该GUID
var query =
buildingObjects
.GroupBy(x => new { x })
.Select(group => new { Name = group.Key, Count = group.Count() })
.OrderByDescending(x => x.Count);
foreach (var q in query)
{
var updateLog = new LogServiceModel()
{
LogType = LogTypes.Warning, Parameters = { {?GUID?}}, LogTitle = "You have used two different classifications on a same Buildingobject in {0}. "
};
logService.Create(updateLog);
}
您可以通过以下方式获得重复对象:
var query = buildingObjects.GroupBy(x => new { x.ObjectId, x.GUID })
.Where(g => g.Count() > 1)
.Select(group => new { Name = group.Key, group.Key.GUID, group.Key.ObjectId }); //I don't know what is Name and why it's equal to Key
然后在foreach循环中:
foreach (var q in query)
{
var updateLog = new LogServiceModel()
{
LogType = LogTypes.Warning, Parameters = q.GUID, LogTitle = $"You have used two different classifications on a same Buildingobject, Id: {q.ObjectId}. "
};
logService.Create(updateLog);
}
或者您可以简单地执行以下操作:
var query = buildingObjects.GroupBy(x => new { x.ObjectId, x.GUID })
.Where(g => g.Count() > 1)
.Select(group => new LogServiceModel()
{
LogType = LogTypes.Warning,
Parameters = group.Key.GUID,
LogTitle = $"You have used two different classifications on a same Buildingobject, Id: {group.Key.ObjectId}."
});
这将返回一个
列表
,其中包含具有重复ObjectId的对象的GUID:
var result = buildingObjects
.GroupBy(b => b.ObjectId)
.Where(g => g.Count() > 1)
.SelectMany(g => g.Select(b => b.GUID)).ToList();
这是什么意思?“在{0}中构建对象”?我想指出代码中的一些东西,为什么GUIDstring
?有内置的Guid
类型GroupBy(x=>new{x})在您的情况下不起作用,您也只能编写
GroupBy(x=>x)`。