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

时间:2017-03-08 03:50:53

标签: c# entity-framework linq

我有一个ID列表,其中ID以MB(对于成员)或NM(对于非成员)开头。

ID会像MB-101或NM-108等......

我正在尝试选择以MB开头的最高ID,然后添加1,然后保存回DB。保存很简单,但我不确定如何查询最高成员或非成员ID并添加一个。非常感谢任何帮助

4 个答案:

答案 0 :(得分:1)

您可以这样做:

import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;

您可以对非会员ID执行相同操作。它是经过测试的代码,它成功解决了您的问题。

希望它有所帮助。

答案 1 :(得分:1)

您可以通过拆分列表获得最大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,你可以删除上面的条件。通过这个,它将从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();

答案 2 :(得分:1)

你可以这样尝试

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将按顺序排序因此,最高值将位于顶部,最后FirstOrDefault将获得第一个值

答案 3 :(得分:0)

您必须将 MB NM 替换为空,然后从订购中获取 FirstOrDefault ,才能对您的列表执行 OrderByDescending 名单。请查看以下示例。

CODE:

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());