Linq到集合(where子句)

本文关键字:子句 where 集合 Linq | 更新日期: 2023-09-27 18:07:58

我试图获得一个集合中最后添加的版本。在这个集合中是一个'|'(管道分隔的字符串…),其中一个管道段的数字很高。我试图得到一个唯一的集合,具有所有这些字符串的最高数量…这听起来可能是一个非常大的问题,我不确定linq是否可以处理这个问题。(我不太使用Linq,所以我不确定它能做什么,不能做什么。做这种事可能吗?如果是,你将如何实现它?简单的算法是需要的,不需要代码,我只需要一个想法,我需要去哪里。

谢谢。

更新:我想做的代码示例…

    List<SelectListItem> PatientList = new List<SelectListItem>();
            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;
                PatientList.Add( new SelectListItem { Text = popPatInfo, Value = patientInfo });
            }
            var queryResults = PatientList.GroupBy(x => x.Value).Select(x => x.FirstOrDefault());

如您所见,我目前有一个列表,它从该集合中获取唯一条目。我希望唯一项也有最高的

    Node.Attributes["enc"].Value

是字符串中的一个管道。我想知道这是否可能?

更新二下面是我尝试的一种方法,这只是我试图很好地掌握linq…

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

UPDATE 3:目标澄清我需要一个唯一的selectListItems列表列表中的每个成员都有一个最大值。

UPDate简单示例

我将有一个简单的例子,不会有所有的字段在管道分隔的字符串,我早些时候发布。这毕竟只是一个例子……

select listtitem I have

    Text: Value1, Value: notUnique|0|endofstring
    Text: Value2, Value: notUnique|1|endofString
    Text: Value3, Value: notUnique|2|endofString
    Text: Value4, Value: Unique1|0|endofString

SelectListItem I want

    Text: Value1, Value: notUnique|2|endofstring
    Text: Value1, Value: Unique1|0|endofstring

Linq到集合(where子句)

我让这段代码工作:

var strValues = 
@"notUnique|0|endofstring,
notUnique|1|endofString,
notUnique|2|endofString,
Unique1|0|endofString";
var values = strValues.Split(',');
var newValues = values.Select(x =>
{ 
    var y = x.Split('|');
    return new { Category = y[0], Value = y[1], TheString = y[2] };
});
var test = newValues.GroupBy(p => p.Category)
                    .Select(g => new 
                                 {  
                                    Category = g.Key,
                                    Value = g.Max(p => p.Value) 
                                 });
foreach(var t in test)
{
    Console.WriteLine(t);
}

你也许能把它变成你需要的东西。前几行只是模拟从csv读取值。对于代码的质量,我很抱歉,我没有时间来清理它或塑造它更接近你上面发布的代码。

取自http://msdn.microsoft.com/en-us/vcsharp/aa336747#maxGrouped

完全未经测试。可能包含错误。

var queryResults =
        from p in PatientList
        group p by p.Value into g
        select new SelectListItem { Text= g.Key, Value= g.Max(p => p.Value.Split('|')[1]) };