c#Linq-获取包含整数列表的所有元素

c#Linq-获取包含整数列表的所有元素,c#,linq,C#,Linq,我有一个对象列表,每个对象内部都有一个类型列表,类似如下: public class ExampleObject { public int Id {get; set;} public IEnumerable <int> Types {get;set;} } Object.Id = 288; Object.Types = new List<int> { 94, 13, 11, 67, 254, 256, 226, 82, 1, 66, 497, 21};

我有一个对象列表,每个对象内部都有一个类型列表,类似如下:

public class ExampleObject
{
    public int Id {get; set;}
    public IEnumerable <int> Types {get;set;}
}
Object.Id = 288;
Object.Types = new List<int> { 94, 13, 11, 67, 254, 256, 226, 82, 1, 66, 497, 21};
例如:

var typesAdmited = new List<int> { 13, 11, 67, 226, 82, 1, 66 };

var objectNotAdmited = new ExampleObeject {Id = 1, Types = new List<int> {13,11}}; 
var objectAdmited = new ExampleObject {Id = 288, Types = new List<int> { 94, 13, 11, 67, 254, 256, 226, 82, 1, 66, 497, 21}};

var allObjects = new List<ExampleObject> { objectNotAdmited, objectAdmited };

var objectsAdmited = allObjects.Where(b => b.Types.All(t => typesAdmited.Contains(t)));
它应该是:

objectsAdmited = { objectAdmited }

您必须交替更改LINQ查询中的两个列表:

var objectsAdmited = allObjects.Where(b => typesAdmited.All(t => b.Types.Contains(t)));

您可以使用Linq解决这个问题。在中间看到小代码块-剩下的是样板,使它成为:

Console.WriteLine(“新列表{11,67,254,256,226,82,};”);
foreach(支持中的var o)
控制台写入线(o.Id);
Console.WriteLine(“新列表{11,67,256,226,82,};”);
foreach(支持2中的var o)
控制台写入线(o.Id);
Console.ReadLine();
}
}
输出:

new List<int>{11, 67, 254, 256, 226, 82, };
1
new List<int>{11, 67, 256, 226, 82, };
1
288
新列表{11,67,254,256,226,82,};
1.
新名单{11、67、256、226、82、};
1.
288

我想获取包含所有允许类型的所有对象,但它们可以包含更多类型,您代码的可能副本工作正常。添加ToList(),以便查看所有结果:var objectsAdmited=allObjects.Where(b=>b.Types.all(t=>typesAdmited.Contains(t)).ToList();
objectsAdmited = { objectAdmited }
var objectsAdmited = allObjects.Where(b => typesAdmited.All(t => b.Types.Contains(t)));
using System;
using System.Collections.Generic;
using System.Linq; 

public class ExampleObject
{
  public int Id { get; set; }
  public IEnumerable<int> Types { get; set; }
}

class Program
{
  static void Main (string [] args)
  {
    var obs = new List<ExampleObject>
    {
      new ExampleObject
      {
        Id=1,
        Types=new List<int> { 94, 13, 11, 67, 254, 256, 226, 82, 1, 66, 497, 21 } 
      },
      new ExampleObject
      {
        Id=288,
        Types=new List<int> { 94, 13, 11, 67,      256, 226, 82, 1, 66, 497, 21 } 
      },
    };

    var must_support = new List<int>{11, 67, 254, 256, 226, 82, };  // only Id 1 fits

    var must_support2 = new List<int>{11, 67, 256, 226, 82, };      // both fit
    // this is the actual check: see for all objects in obs 
    // if all values of must_support are in the Types - Listing
    var supports  = obs.Where(o => must_support.All(i => o.Types.Contains(i)));
    var supports2 = obs.Where(o => must_support2.All(i => o.Types.Contains(i)));
    Console.WriteLine ("new List<int>{11, 67, 254, 256, 226, 82, };");
    foreach (var o in supports)
      Console.WriteLine (o.Id);

    Console.WriteLine ("new List<int>{11, 67, 256, 226, 82, };");
    foreach (var o in supports2)
      Console.WriteLine (o.Id);

    Console.ReadLine ();
  }
}
new List<int>{11, 67, 254, 256, 226, 82, };
1
new List<int>{11, 67, 256, 226, 82, };
1
288