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