Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用数组的动态LINQ Contains仅计算第一个值_C#_Linq_Iqueryable_Dynamic Linq - Fatal编程技术网

C#使用数组的动态LINQ Contains仅计算第一个值

C#使用数组的动态LINQ Contains仅计算第一个值,c#,linq,iqueryable,dynamic-linq,C#,Linq,Iqueryable,Dynamic Linq,对C#相对较新,并开始使用动态LINQ使用字符串过滤数据表适配器。我遇到的问题是Where子句似乎只计算字符串中的第一个值,而不计算其他值。这是我正在使用的代码 string[] ids = new string[] { "12345", "67891", "45878" }; var resultQ = (from pr in table1 select pr).AsQueryable();

对C#相对较新,并开始使用动态LINQ使用字符串过滤数据表适配器。我遇到的问题是Where子句似乎只计算字符串中的第一个值,而不计算其他值。这是我正在使用的代码

        string[] ids = new string[] { "12345", "67891", "45878" };
        var resultQ = (from pr in table1 select pr).AsQueryable();
        var iq = resultQ.Where("@0.Contains(FieldName)", ids);  
它工作,但仅适用于第一个值“12345”,因此iq的输出显示“12345”的所有字段。我试着使用linq.dynamic.core看看这是否有帮助,但结果还是一样(或者我没有正确地使用它)。我知道我可能在这里遗漏了一些小东西,但任何帮助都将不胜感激

还有一点需要注意:我想将iq的最终结果(IQueryable类型)转换为EnumerationRowCollection类型。这可能吗


提前谢谢

用这个就行了。它会很好用的

string[] ids = new string[] { "12345", "67891", "45878" };

var resultQ = (from pr in table1 select pr).AsQueryable();

var iq = resultQ.Where(w => ids.Contains(w.Id)).ToList();

现在设法解决了这两个问题。将字符串[]设置为动态LINQ的字符串以获取列表中的所有值,如下所示

string ids =  "12345,67891,45878";
var resultQ = (from pr in table1 select pr).AsQueryable();
var iq = resultQ.Where("@0.Contains(FieldName)", ids); 
或者使用Syed的建议,更改LINQ查询并保留数组(再次感谢Seyed)

为了将IQueryable类型转换为EnumerationRowCollection,我将EnumerationRowCollection更改为IEnumerable,这适用于所有LINQ查询


谢谢

什么是
pr
table1
变量?请提供完全可复制的代码。您好,table1指的是表适配器(table1=TableAdapter1.GetData();),pr只是用于行的范围变量。这与动态LINQ contain语句没有拾取数组中的所有值无关。干杯,请分享。太棒了,谢谢Syed,这也行!我还想将iq列表转换为EnumerablerRowCollection类型这可能吗?欢迎光临。托利斯特不能满足您的要求吗?然后让我知道我想在另一个LINQ方法中使用iq来分组和求和。我已经将LINQ方法添加到一个函数中,以便在许多不同的地方使用参数,但是当我使用以下命令时,我得到了一个“带有语句体的lamda表达式无法转换为表达式树”。不使用IQueryable即可工作。选择(g=>{DataRow row=table1.NewRow();row[field]=g.Key;row[aggr]=g.Sum(r=>r.field(aggr));