C# 对象字段包含数组元素
我有一个数组:C# 对象字段包含数组元素,c#,arrays,linq,C#,Arrays,Linq,我有一个数组: string myArray={"15","56","17-75","78","100-150","130"} 我想通过数组元素过滤我的列表 我希望与下面的代码等效,但以编程方式: mylist.Where(i=>i.val==15 || i.val==56 || (i.val >= 17 && i.val<75) ||i.val==78 || (i.val >= 100 && i.val<150)|| i.val=
string myArray={"15","56","17-75","78","100-150","130"}
我想通过数组元素过滤我的列表
我希望与下面的代码等效,但以编程方式:
mylist.Where(i=>i.val==15 || i.val==56 || (i.val >= 17 && i.val<75) ||i.val==78 || (i.val >= 100 && i.val<150)|| i.val==130)
mylist.Where(i=>i.val==15 | | i.val==56 | | |(i.val>=17&&i.val=100&&i.val首先将字符串转换为更有效的比较对象:
int[][] spans =
myArray.Select(
s => s.Split('-').Select(v => Int32.Parse(v)).ToArray()
).ToArray();
然后,您可以将列表中的项目与值进行比较:
list.Where(i => spans.Any(s => {
if (s.Length == 1) {
return i == s[0];
} else {
return i >= s[0] && i <= s[1];
}
}));
list.Where(i=>span.Any(s=>{
如果(s.Length==1){
返回i==s[0];
}否则{
return i>=s[0]&&i我已经为您准备了一个控制台应用程序。请检查一下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
IEnumerable<Person> myQuery = null;
List<Person> peopleList = new List<Person>();
Person p1 = new Person();
p1.Name = "x"; p1.Age = 15;
peopleList.Add(p1);
Person p2 = new Person();
p2.Name = "y"; p2.Age = 50;
peopleList.Add(p2);
string[] myArray = { "15", "56", "17-75", "78", "100-150", "130" };
foreach (string strAge in myArray)
{
string strLocalAge = strAge;
if (!strLocalAge.Contains("-"))
{
if (myQuery == null)
{
myQuery = peopleList.Where(p => p.Age == Convert.ToInt32(strLocalAge));
}
else
{
myQuery = myQuery.Union(peopleList.Where(p => p.Age == Convert.ToInt32(strLocalAge)));
}
}
else
{
string[] agePart = strLocalAge.Split(new char[] { '-' });
if (agePart.Length == 2)
{
if (myQuery == null)
{
myQuery = peopleList.Where(p => p.Age >= Convert.ToInt32(agePart[0]) && p.Age <= Convert.ToInt32(agePart[1]));
}
else
{
myQuery = myQuery.Union(peopleList.Where(p => p.Age >= Convert.ToInt32(agePart[0]) && p.Age <= Convert.ToInt32(agePart[1])));
}
}
}
}
var myresult = myQuery.ToList();
foreach (Person p in myresult)
{
Console.WriteLine("Name: " + p.Name + " Age: " + p.Age.ToString());
}
Console.ReadLine();
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班主任
{
公共字符串名称{get;set;}
公共整数{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
IEnumerable myQuery=null;
List peopleList=新列表();
人员p1=新人员();
p1.Name=“x”;p1.Age=15;
人员列表。添加(p1);
人员p2=新人员();
p2.Name=“y”;p2.Age=50;
添加(p2);
字符串[]myArray={“15”、“56”、“17-75”、“78”、“100-150”、“130”};
foreach(myArray中的字符串串)
{
字符串strLocalAge=strAge;
如果(!strLocalAge.Contains(“-”)
{
if(myQuery==null)
{
myQuery=peopleList.Where(p=>p.Age==Convert.ToInt32(strLocale));
}
其他的
{
myQuery=myQuery.Union(peopleList.Where(p=>p.Age==Convert.ToInt32(strLocalAge));
}
}
其他的
{
字符串[]agePart=strLocalAge.Split(新字符[]{'-});
如果(agePart.Length==2)
{
if(myQuery==null)
{
myQuery=peopleList.Where(p=>p.Age>=Convert.ToInt32(agePart[0])&&p.Age p.Age>=Convert.ToInt32(agePart[0])&&p.Age