linq - 至少有一个对象必须实现 Icomparable

标签 linq c#-4.0

我正在尝试在相似值列表中获取唯一值,仅通过管道分隔字符串中的一个元素来区分...我不断得到至少一个对象必须实现 Icomparable。我不明白为什么我总是得到这个。我能够按该值进行分组...为什么我找不到最大值...我猜它正在寻找与之比较的东西。如果我得到整数版本,它会停止对我大喊大叫吗?这是我最后一次尝试使用 LINQ...

    var queryResults = PatientList.GroupBy(x => x.Value.Split('|')[1]).Select(x => x.Max());

我知道我可以通过其他方式获得独特的值(value)。我只是很难弄清楚。在该列表中,我知道在其相似的兄弟中具有最高值的字符串是我要添加到列表中的字符串。我怎样才能做到这一点?我完全一片空白,因为过去几天我一直试图让它在 linq 中工作,但没有运气......

    foreach (XmlNode node in nodeList)
            {
                XmlDocument xDoc = new XmlDocument();
                xDoc.LoadXml(node.OuterXml);
                string popPatInfo = xDoc.SelectSingleNode("./template/elements/element[@name=\"FirstName\"]").Attributes["value"].Value + ", " + xDoc.SelectSingleNode("./template/elements/element[@name=\"LastName\"]").Attributes["value"].Value + " | " + DateTime.Parse(xDoc.SelectSingleNode("./template/elements/element[@name=\"DateOfBirth\"]").Attributes["value"].Value.Split('T')[0]).ToString("dd-MMM-yyyy");
                string patientInfo = xDoc.SelectSingleNode("./template/elements/element[@name=\"PatientId\"]").Attributes["value"].Value + "|" + xDoc.SelectSingleNode("./template/elements/element[@name=\"PopulationPatientID\"]").Attributes["enc"].Value;// +"|" + xDoc.SelectSingleNode("./template/elements/element[@name=\"AdminDate\"]").Attributes["value"].Value;
                int enc = Int32.Parse(patientInfo.Split('|')[1]);
                if (enc > temp)
                {
                    lastEncounter.Add(enc, patientInfo);
                    temp = enc;
                }
                //lastEncounter.Add(Int32.Parse(patientInfo.Split('|')[1]));

                PatientList.Add( new SelectListItem { Text = popPatInfo, Value = patientInfo });
            }

我正在考虑使用某种临时变量来找出最高值,然后将该字符串添加到列表中。然而我完全一片空白......

最佳答案

在这里,我以匿名类型获取 ID 以使其可读。

var patientEncounters= from patient in PatientList
                       let PatientID=Int32.Parse(patient.Value.Split('|')[0])
                       let EncounterID=Int32.Parse(patient.Value.Split('|')[1])
                       select new { PatientID, EncounterID };

然后我们按 UserID 分组并获取最后一次遭遇

var lastEncounterForEachUser=from pe in patientEncounters
                             group pe by pe.PatientID into grouped
                             select new 
                                    { 
                                        PatientID=grouped.Key,
                                        LastEncounterID=grouped.Max(g=>g.EncounterID)
                                    };

关于linq - 至少有一个对象必须实现 Icomparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7361514/

相关文章:

c# - 是否可以搜索枚举类型的值列表以查看是否存在 int?

c# - 下层调用者是否能够从使用 C# 4.0 生成的程序集中的可选参数中获益?

c# - 使用 join、group-by 和 where 将 sql 转换为 linq

LINQ to SQL DAL + BLL + 演示文稿

c# - 获取奇数长度字符串的中间三个字符

c#-4.0 - StructureMap - 每个命名实例有不同的生命周期

c# - 无法将类型 'System.Int64' 转换为类型 'System.Object'。 LINQ to Entities 仅支持转换实体数据模型基元类型

c# - 远程服务器返回意外响应 : (502) Bad Gateway in Azure WCF

mysql - 让我的 SQL 查询以 LINQ 形式显示

c# - 一个列数据表到 List<string>