我需要一个更好的解决方案,下面的代码在linq或任何其他更好的方式,代码使所有的项目向上匹配的condition.If条件是process.Name = "process-5“,它应该返回所有项的条件匹配,包括匹配的项目,在这种情况下,将有5个项目在列表中。
using System;
using System.Collections.Generic;
namespace ListSelectSample
{
class Process
{
public long Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
var processlist = new List<Process>();
for(var count = 1; count <= 10; count++)
processlist.Add(new Process() { Id = count, Name = "Process-" + count});
var selectedprocesslist = new List<Process>();
foreach (var process in processlist)
{
selectedprocesslist.Add(process);
if (process.Name.ToLower().Equals("process-4"))
break;
}
Console.ReadKey();
}
}
}发布于 2016-11-09 05:20:25
var selectedProcessList = processList
.TakeWhile(x => !x.Name.ToLower().Equals("process-4"))
.ToList();
// Include selected item
if (selectedProcessList.Length < processList.Length)
selectedProcessList.Add(processList
.SkipWhile(x => !x.Name.ToLower().Equals("process-4"))
.First());编辑:使用上述方法的检查和警告的,混合解决方案可能更干净:
int idx = processList.Select(x => x.Name.ToLower()).ToList().IndexOf("process-4");
var selectedProcessList = idx < 0 ? processList : processList.Take(idx + 1).ToList();不过,正如M.kazem所说,LINQ解决方案不会像您目前使用的迭代方法那样高效。如果您的列表足够小,则差异可以忽略不计,但请记住这一点。
发布于 2016-11-09 05:35:51
你可以FindIndex()和采取()
在找到index name等于process-4之前,从processlist中获取列表
int index = processlist.FindIndex(x => x.Name.ToLower().Equals("process-4"));
var selectedProcessList = processlist.Take(index+1).ToList();发布于 2016-11-09 06:09:23
试试这个。
它需要名称属性的固定模式。
var selectedprocesslist = processlist.Where(o => Convert.ToInt16(o.Name.Split('-')[1]) <= Convert.ToInt16(("process-4").Split('-')[1])).ToList(); https://stackoverflow.com/questions/40500420
复制相似问题