繁体   English   中英

Linq选择ID为字母数字的最高ID

[英]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将获得拳头价值

您必须通过将MBNM替换为空来执行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM