【发布时间】:2019-11-13 23:13:33
【问题描述】:
我知道一些类似的问题在堆栈溢出中徘徊,但是尽管它们似乎都没有按照我想要的方式工作。这是我想要实现的想法:
// arrays vary depends what's in bigger loop
string[] columnNames = {"id", "name", "surname", "address", "phone"}
// ...
foreach (string columnName in columnNames)
{
if (condition)
{
IQueryable<tableType> query = from x in dbContext where x.(**columnName**).contains(otherVariable) select x;
}
// ...
// Another queries wrapped in if conditions
}
我已经用我在这里找到的 typeof() 和 Type.GetProperty() 进行了尝试,但它似乎没有任何作用。另一件事是我希望这尽可能符合当前最佳实践的标准,如果我正在寻找错误的方向,那么我应该指向哪里?我需要让这种方法可重用于数以百计的视图和表。
干杯,
【问题讨论】:
-
检查这个答案:stackoverflow.com/a/24732863/12258072 他们使用反射 (GetType().GetProperty(columnName).GetValue(x)) 来动态访问这些值。
-
这个解决方案的问题是它只需要有问题的特定列的值,而我需要通过将 WHERE 条件应用于该列来从 IQueryable 中提取数据以进行进一步的条件查询,如果这有任何意义( ?)
-
不确定我是否理解这一点,但是您可能只是将查询存储到按列名索引的字典中,这样您就可以对每一列进行查询,然后可以进一步细化。跨度>
-
这不是仅通过变量名提取列的数据的问题,而是通过变量名将 where 子句应用于没有强类型列名的列。在这个项目中可能有数以万计的列名,它是我感兴趣的包含/相等字符串子句。但最后我必须选择整个表。
标签: c# entity-framework