C# 用于选择db列的LINQ实体框架变量

C# 用于选择db列的LINQ实体框架变量,c#,linq,entity-framework,C#,Linq,Entity Framework,有人知道如何查询变量以选择表的列名吗?示例如下所示。我不选择(x=>x.ColumnName),而是选择(field) 这是完全未经测试的,我不确定这是一件事,但你能创建一个模板扩展方法吗 public static IQueryable<T> Select(this IQueryable<T> list, string field) { // Create an Expression and find the property field Paramet

有人知道如何查询变量以选择表的列名吗?示例如下所示。我不选择(x=>x.ColumnName),而是选择(field)


这是完全未经测试的,我不确定这是一件事,但你能创建一个模板扩展方法吗

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
}
公共静态IQueryable选择(此IQueryable列表,字符串字段)
{
//创建表达式并查找属性字段
ParameterExpression pe=Expression.Parameter(类型(字符串),字段);
//将表达式应用于IQueryable
}
下面是一些表达式创建的链接:


看看动态linq库:

我有一个项目,其中我从指定列返回一个不同值的列表,如下所示:

    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;
    }
公共静态列表GetValuesFromDB(字符串列)
{
GradInfoEntities db=新的GradInfoEntities();
//如果我传入列名,它将不起作用
//我怀疑如果我作为param传递,它会被引用,因为我传递的是值,而不是列
var temp=db.Grads.Where(string.Format(“{0}!=null”,column))。选择(column);
列表结果=temp.Cast().ToList();
返回结果;
}
Dyamanic Linq库为where和select(以及其他一些,但我只使用了这两个)添加了重载,允许您通过传入变量指定要选择的列

我已经删除了排序和distinct调用,但基本上我返回了一个字符串列表,其中包含传入列中不为null的所有值

编辑:我刚检查过,没有First(),但有Take()和Any()

试试这个

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

var result=db.users.SelectFirst(“Name”);

这是最难的部分。:)您可以将其放在扩展方法中以保留所需的Select(字符串)语法。@标记,是的,对!我只提供样品。他们可以将其作为扩展方法。
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();
Install-Package DotNetHelper
var result = db.users.SelectFirst<Table, string>("Name");