动态引用 IQueryable <T>中的实体框架列



我知道一些类似的问题在堆栈溢出中徘徊,尽管它们似乎都没有按我想要的方式工作。以下是我想要实现的想法:

// 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((中尝试过了,但它似乎根本不起作用。另一件事是,我希望这在当前最佳实践的标准中尽可能多,如果我朝着错误的方向看,那么我应该指向哪里?我需要使这种方法可用于成千上万的视图和表。

欢呼,

不应该在数组中存储字符串,而应该存储表达式。

Expression<Func<TableType, bool>>[] conditions = new {
x => x.ID > 5,
x => x.Name > "M" };

等等。然后你可以查询

var query = dbContext.YourTable.Where(conditions[1])

这比使用反射或动力学或其他方法更简单、更容易阅读。

还可以通过多个where子句组合多个条件。

由于您的示例隐含了where子句,所以我不得不在这里发明一些布尔表达式。

只是不要从存储字符串开始(除非这些字符串是用户输入的(

我必须通过链接回答我的问题,链接到@Aleks Andreev回答的另一篇帖子

动态列的LINQ where条件

这正是我想要的。

最新更新