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

问题描述 投票:0回答:3

对 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 类型。这可能吗?

提前致谢

c# linq iqueryable dynamic-linq
3个回答
1
投票

现在设法解决这两点。将 string[] 设置为动态 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 查询

谢谢


0
投票

就用这个吧。效果会很好。

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();

0
投票

("12345,67891,45878").包含(FieldName)

© www.soinside.com 2019 - 2024. All rights reserved.