我需要一个更好的解决方案,用于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();
}
}
}
答案 0 :(得分:1)
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解决方案不如您当前使用的迭代方法效率高。如果你的名单足够小,差异可以忽略不计,但要记住这一点。
答案 1 :(得分:1)
在找到index
name
等于process-4
之前,请从processlist
int index = processlist.FindIndex(x => x.Name.ToLower().Equals("process-4"));
var selectedProcessList = processlist.Take(index+1).ToList();
答案 2 :(得分:0)
试试这个。
它需要一个Name属性的修复模式。
view