繁体   English   中英

LINQ实体框架变量以选择数据库列

[英]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
}

这是一些表达式创建的链接:

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

Dyamanic Linq库为where和select添加了重载(还有一些其他重载,但我只使用了这两个重载),这些重载允许您通过传入的变量指定要选择的列。

我已经截断了排序和非重复调用,但是基本上我是从传入的列中返回所有不为空的值的字符串列表

编辑:我刚刚检查了没有First(),但是有一个Take()和一个Any()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM