对 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[] 设置为动态 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 查询
谢谢
就用这个吧。效果会很好。
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();
("12345,67891,45878").包含(FieldName)