C# 使用linq在列表中的对象内发现重复变量,然后在所述对象中使用包含重复objectId的另一个变量

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

我是linq的新手,我已经尝试过这个函数,它应该检查重复项。我想做的是检查我的buildingobject列表,以检查任何buildingobject是否包含与列表中另一个buildingobject相同的objectID。最后,我想使用buildingObject的GUID,它有一个副本,并将其打印到我的日志中供用户查看

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}中构建对象”?我想指出代码中的一些东西,为什么GUID
string
?有内置的
Guid
类型
GroupBy(x=>new{x})在您的情况下不起作用,您也只能编写
GroupBy(x=>x)`。