[英]LINQ Entity Framework Variable to select db Column
有谁知道如何查询变量以选择表的列名? 示例如下。 我想选择(field)而不是Select(x => x.ColumnName)。
public bool isFound(string field, int id)
{
db.Table.Where(x => x.tableID == id).Select(field).First();
return;
}
尝试这个,
string field = "tableID";
ParameterExpression param = Expression.Parameter(typeof(Table), "x");
MemberExpression propExpression = Expression.PropertyOrField(param, field);
Expression<Func<Table, string>> selector = Expression.Lambda<Func<Table, string>>(propExpression, param);
var result = db.Table.Select(selector).First();
或使用Nuget包DotNetHelper - https: //www.nuget.org/packages/DotNetHelper/
Install-Package DotNetHelper
-
var result = db.users.SelectFirst<Table, string>("Name");
这是完全未经测试的,我不确定它是什么,但是您可以创建模板化扩展方法吗?
public static IQueryable<T> Select(this IQueryable<T> list, string field)
{
// Create an Expression and find the property field
ParameterExpression pe = Expression.Parameter(typeof(string), field);
// Apply the Expression to the IQueryable
}
这是一些表达式创建的链接:
看一下动态linq库:
https://www.nuget.org/packages/System.Linq.Dynamic.Library/
我有一个项目,其中从指定的列返回不同值的列表,如下所示:
public static List<string> GetValuesFromDB(string column)
{
GradInfoEntities db = new GradInfoEntities();
//if i pass the column name in it doesn't work
//i suspect that if i pass as param, it gets quoted coz i'm passing in the value, not the column
var temp = db.Grads.Where(string.Format("{0} != null", column)).Select(column);
List<string> result = temp.Cast<string>().ToList();
return result;
}
Dyamanic Linq库为where和select添加了重载(还有一些其他重载,但我只使用了这两个重载),这些重载允许您通过传入的变量指定要选择的列。
我已经截断了排序和非重复调用,但是基本上我是从传入的列中返回所有不为空的值的字符串列表
编辑:我刚刚检查了没有First(),但是有一个Take()和一个Any()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.