LINQ实体框架变量选择db列
本文关键字:db 选择 变量 实体 框架 LINQ | 更新日期: 2023-09-27 18:05:07
有人知道我如何查询一个变量来选择一个表的列名吗?示例如下。而不是选择(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
}
下面是一些表达式创建的链接:
https://msdn.microsoft.com/en-us/library/Bb882637.aspx看看动态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;
}
动态Linq库为where和select(以及其他一些,但我只使用了这两个)添加了重载,允许您通过传入变量指定要选择的列。
我已经剪掉了排序和不同的调用,但基本上我返回的是一个字符串列表,所有值都不是null,从传入列
编辑:我刚刚检查过,没有First(),但有Take()和Any()