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