【发布时间】:2021-02-07 21:42:05
【问题描述】:
用例:用户需要能够选择要查看的输入字段。然后,该字段请求通过查询传递,该查询随后返回用户输入的列表以供查看。基本上,SQL 中的动态 Select 语句,其中 FROM 列是用户定义的变量。
方法: 使用 C# 和 Linq 我编写了以下 Linq 查询来返回数据,但是,我无法将查询中的实际字段名称与具有由用户设置。
研究:我已经查看了十几个类似的问题和文章,它们似乎都比我想要完成的要复杂得多,而且它们似乎没有回答我的问题有充分的;或者我只是不明白解决方案实际上是什么。我尝试过使用 Dynamic Linq,但运气不佳,使用 Expression Trees 似乎比我希望的实际需要复杂得多。
明确定义的字段选择:
var Values = conn.Table<DataTable>()
.Where(t => t.User_ID == ID)
.Select(t => FieldName).Distinct().ToList();
变量字段选择
//allowing the user to set the value
string UserSelectedField = y_List[0].ToString();
var Values = conn.Table<DataTable>()
.Where(t => t.User_ID == ID)
.Select(t => @UserSelectedField).Distinct().ToList();
在第一个查询中,我得到了我正在寻找的结果,但它只能从代码中键入的字段返回值。
第二个返回对象名称,如 {FieldName = FieldName}。
我也尝试在查询中将其连接起来,但没有奏效。认为它不会,但值得一试。
【问题讨论】:
-
如果您需要快速简单的 - 您可以使用这样的库:dynamic-linq.net
-
您应该能够使用LINQKit 并创建字符串查询,但是有一些很大的限制 - 例如。你不会在编译时知道
Values的静态类型,所以你不能直接引用任何字段。 -
@Evk 他们所有的自述文件数据都进入了一个不存在的页面,并且他们的示例由于某种原因对我不起作用。我以前试过。我确定我做错了什么或某事,但它不起作用,并且没有任何我能找到有用的说明。