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;
}

LINQ实体框架变量选择db列

试试这个,

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()