Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用字符串或propertyInfo使用Linq选择特定列_C#_.net_Linq_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 使用字符串或propertyInfo使用Linq选择特定列

C# 使用字符串或propertyInfo使用Linq选择特定列,c#,.net,linq,entity-framework,entity-framework-6,C#,.net,Linq,Entity Framework,Entity Framework 6,我正在使用EF重建我们的报告系统,因为我们的旧系统使用了很多动态SQL(我知道这很糟糕),所以我想使用Linq,所以它使用参数化查询等 在报表中,用户可以选择要查看的数据列。现在,我如何获取这些值并使用Linq返回SQL语句并获得所需的列?我想知道我是否应该费心返回所有数据,然后在屏幕上显示用户想要的列,这可能是我需要做的,但我想我还是会问 让我们以下面的Linq为例,我说我只想要Id、姓名和城镇,我怎么能做到这一点。目前我有一些类似于 var columns = new List<str

我正在使用EF重建我们的报告系统,因为我们的旧系统使用了很多动态SQL(我知道这很糟糕),所以我想使用Linq,所以它使用参数化查询等

在报表中,用户可以选择要查看的数据列。现在,我如何获取这些值并使用Linq返回SQL语句并获得所需的列?我想知道我是否应该费心返回所有数据,然后在屏幕上显示用户想要的列,这可能是我需要做的,但我想我还是会问

让我们以下面的Linq为例,我说我只想要Id、姓名和城镇,我怎么能做到这一点。目前我有一些类似于

var columns = new List<string>() { "Id", "Name", "Town" };

return _context.Data
    .Where(e => e.Name == "test")
    .ToList();
var columns=newlist(){“Id”、“Name”、“Town”};
返回_context.Data
.其中(e=>e.Name==“测试”)
.ToList();

这是可能的吗?

如果您没有选择符合其名称的房地产,请尝试图书馆:

公共列表ListByNames(字符串[]arr)
{
var str=string.Format(“new({0})”,string.Join(“,”,arr));
返回_context.Data.Select(str);
}

或者编写自己的
表达式
,参见@TomBrothers答案:

我知道这种问题。主要问题:使用EF,您不再处理列,而是处理属性

试试这样的事情:

var column="yourcolumn";
return _context.Data.Where(e => e.GetType().GetProperty(column).GetValue(_context, null)).ToList();

这可能会让您知道,在
EF
表达式中不能使用
Reflection
。我自己直接在EF模型上使用反射。这意味着返回上下文。数据。。。您可能必须首先设置一个var data=_context.data,然后设置var result=data.Where(…),然后返回result.right,这在LINQ2OBJECT中是可能的。但问题是如何避免不必要的DB查询结果(LinqToEntity)。
var column="yourcolumn";
return _context.Data.Where(e => e.GetType().GetProperty(column).GetValue(_context, null)).ToList();