C# 在linq查询中创建某种循环

C# 在linq查询中创建某种循环,c#,linq,C#,Linq,我有一个方法要用来过滤listview。我正在动态创建列表视图,因此我事先不知道列的数量。lstCurrentDynamicItems是一个只有一个属性的类,该属性名为c,其类型为object[]。我创建这个类是为了保存listview的对象。如果我总是使用相同的listview,那么构建以下方法就不会有问题。我如何实现以下方法 public void filterListView(string[] columnsContains) { // lstCur

我有一个方法要用来过滤listview。我正在动态创建列表视图,因此我事先不知道列的数量。lstCurrentDynamicItems是一个只有一个属性的类,该属性名为c,其类型为object[]。我创建这个类是为了保存listview的对象。如果我总是使用相同的listview,那么构建以下方法就不会有问题。我如何实现以下方法

public void filterListView(string[] columnsContains)
        {
            // lstCurrentDynamicItems is a list of objects
            // columnsContains is what I want to filter.             
            var qr = from a in lstCurrentDynamicItems
                     where a.c[0].ToString().Contains(columnsContains[0]) &&
                           a.c[1].ToString().Contains(columnsContains[1]) &&
                           a.c[2].ToString().Contains(columnsContains[2]) &&
                           //    ...
                           //    ...
                           //    ...
                           a.c[columnsContains.Length].ToString().Contains(columnsContains[columnsContains.Length])                            
                    select a;

            listView.DataContext = qr;
        }

像这样的方法应该会奏效:

var qr = 
from a in lstCurrentDynamicItems
where Enumerable.Range(0,columnsContains.Length)
                .All(i => a.c[i].ToString().Contains(columnsContains[i]))
select a;

像这样的方法应该会奏效:

var qr = 
from a in lstCurrentDynamicItems
where Enumerable.Range(0,columnsContains.Length)
                .All(i => a.c[i].ToString().Contains(columnsContains[i]))
select a;
这与@digEmAll的答案之间的区别在于,如果columnContains的元素比c集合多,则他的解决方案将失败;而另一方面,如果columnContains的元素比c集合少,则此解决方案将失败


这与@digEmAll的答案的区别在于,如果columnContains的元素比c集合多,那么他的解决方案将失败;而另一方面,如果columnContains的元素比c集合少,那么这个解决方案将失败。

这是对


如果序列的长度不相等,则其他一些方法会失败,但这将始终忽略任何长度不匹配,并且只比较现有元素,而不管哪个序列更长。

这是一个完美的方法


如果序列的长度不相等,则其他一些方法会失败,但这将始终忽略任何长度不匹配,而仅比较现有元素,无论哪个序列更长。

@Tono Nam:当然,你必须确保a.c.长度始终等于或大于columnsContains。Length@TonoNam:当然,你必须保证交流长度始终等于或大于columnsContains.Length
var qr = from a in lstCurrentDynamicItems
   where c
      .Zip(columnsContains, (a, b) => a.ToString().Contains(b))
      .All(p => p)
   select a;