C# “动态”;其中;类似于对内存对象的查询
允许用户在如下定义的对象上定义类似WHERE的约束的最佳方法是什么:C# “动态”;其中;类似于对内存对象的查询,c#,.net,linq,C#,.net,Linq,允许用户在如下定义的对象上定义类似WHERE的约束的最佳方法是什么: Collection<object[]> data Collection<string> columnNames 收集数据 集合列名称 其中,对象[]是一行 我在考虑动态创建一个强类型的包装器,只使用动态LINQ,但也许有一个更简单的解决方案 DataSet不是一个真正的选项,因为集合相当大(40000多条记录),我不想每次运行查询时都创建DataTable并填充它。您需要运行哪种查询?如果只是平等
Collection<object[]> data
Collection<string> columnNames
收集数据
集合列名称
其中,对象[]是一行
我在考虑动态创建一个强类型的包装器,只使用动态LINQ,但也许有一个更简单的解决方案
DataSet不是一个真正的选项,因为集合相当大(40000多条记录),我不想每次运行查询时都创建DataTable并填充它。您需要运行哪种查询?如果只是平等,那就相对容易:
public static IEnumerable<object[]> WhereEqual(
this IEnumerable<object[]> source,
Collection<string> columnNames,
string column,
object value)
{
int columnIndex = columnNames.IndexOf(column);
if (columnIndex == -1)
{
throw new ArgumentException();
}
return source.Where(row => Object.Equals(row[columnIndex], value);
}
公共静态IEnumerable,如果相等(
这是一个数不清的来源,
集合列名称,
字符串列,
对象值)
{
int columnIndex=columnNames.IndexOf(column);
如果(columnIndex=-1)
{
抛出新ArgumentException();
}
返回source.Where(行=>Object.Equals(行[columnIndex],值);
}
如果您需要更复杂的内容,请给我们一个您希望能够编写的示例。当仅使用
对象时,LINQ并不会对您有多大帮助…它值得您付出痛苦吗?而动态LINQ无疑是过火了。使用它的预期方式是什么?我可以想出一些添加基本的方法e> 其中
操作……但我不确定这会有多大帮助。我在想这样的事情:
Collection<object[]> data
Collection<string> columnNames
((col1=“abc”)或(col2=“xyz”)和(col3=“123”)
最终,支持带有%通配符的LIKE运算符会很好。在您的项目中嵌入LIKE运算符怎么样?我们使用它来允许用户定义自己的表达式(过滤器等)沙箱内部。如果我明白你的意思:你想支持用户在外部编写where子句-我的意思是用户是真正的用户,而不是开发人员,所以你寻求uicontrol、代码where条件桥的解决方案。我之所以这样做是因为你提到了dlinq
所以如果我是对的,你想做的是:
- 允许用户使用列名
- 提供描述布尔函数的能力(将作为where标准)
- 动态组合查询并运行
另一件事:LINQ与此问题有关,因为返回IQueryable的函数可以延迟查询执行,您可以预先定义查询,并且在代码的另一部分中,可以根据用户的条件扩展返回的queryable(然后可以使用扩展方法将其粘贴).谢谢大家-我终于找到了它。它名为NQuery,可从CodePlex获得。在它的文档中,甚至有一个示例包含与我的结构的绑定-列名列表+对象[]列表。再加上功能齐全的SQL查询引擎
完美极了。(这不应该在问题中,而不是作为答案吗?)