![](/img/trans.png)
[英]How to select distinct employees with LINQ based on ID from an employee collection where employee 's salary is 2nd highest?
[英]Linq to select highest ID where the ID is alphanumeric
我有一个ID列表,其中ID以MB(对于成员)或NM(对于非成员)开头。
该ID类似于MB-101或NM-108等...
我试图选择以MB开头的最高ID,然后再添加1,然后再保存回DB。 保存很容易,但是我不确定如何查询最高的Member或Nonmember ID并将其添加一个。 任何帮助深表感谢
您可以执行以下操作:
List<string> list = new List<string>() { "MB-101", "MB-102", "MB-103", "MB-104"};
var ids = list.Select(x =>Convert.ToInt32(x.Replace("MB-", "")));//convert all the number parts to integer
list[list.FindIndex(x => x == "MB-" + ids.Max().ToString())] = "MB-" + (ids.Max() + 1);//set the max number after adding one.
您可以使用非会员ID进行相同的操作。 它是经过测试的代码,可以成功解决您的问题。
希望能帮助到你。
您可以通过如下拆分列表来获取最大ID:
var ids = yourList.Where(x => x.ID.StartsWith("MB-")).Select(x => new { ID = x.ID.Split('-')[1] }).ToList();
var maxIdValue = ids.Select(x => int.Parse(x.ID)).ToList().Max();
如果您想同时使用MB-和NB-开头的最大ID,则可以在where条件以上删除。 这样,它将同时从MB-和NB-获取最大ID。 查询以下内容:
var ids = yourList.Select(x => new { ID = x.ID.Split('-')[1] }).ToList();
var maxIdValue = ids.Select(x => int.Parse(x.ID)).ToList().Max();
你可以这样尝试
List<string> lststr = new List<string>() { "MB-101", "MB-103", "MB-102", "NM-108" };
var result = "MB-"+ lststr
.Where(x=>x.Contains("MB"))
.Select(x => Regex.Replace(x, @"[^\d]", ""))
.OrderByDescending(x=>x)
.FirstOrDefault();
它将返回MB-103
因为它将首先检查字符串是否包含MB
然后它将用""
而不是数字)替换所有内容, OrderByDescending
降序对OrderByDescending
进行排序,以使最大值位于顶部,最后FirstOrDefault
将获得拳头价值
您必须通过将MB或NM替换为空来执行OrderByDescending列表,并从有序列表中获取FirstOrDefault 。 请检查以下示例。
码:
List<string> list = new List<string>() { "MB-101", "MB-102", "MB-109", "MB-105", "NM-110"};
var maxMember = list.OrderByDescending(m=>Convert.ToInt16(m.Replace("MB-","").Replace("NM-",""))).ToList().FirstOrDefault();
Console.WriteLine(maxMember.ToString());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.