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

时间:2015-02-25 09:36:49

标签: c# .net linq entity-framework entity-framework-6

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

在报告中,用户可以选择要查看的数据列。现在我如何获取这些值并使用Linq返回一个SQL语句并获取我需要的列?我想知道我是否应该打扰并只返回所有数据,然后只显示用户想要在屏幕上显示的列,这可能是我想要做的,但我想无论如何都要问。

所以让我们采取以下Linq示例,我说我只想要Id,Name和Town,我怎么能这样做。目前我有类似的东西

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

return _context.Data
    .Where(e => e.Name == "test")
    .ToList();

这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

如果你想根据他们的名字选择属性,请尝试Dynamic LINQ library:

public List<Data> ListByNames(string[] arr)
{
    var str = string.Format("new ({0})", string.Join(", ", arr));
    return _context.Data.Select(str);
}

或者自己编写Expression,请参阅@TomBrothers答案:https://stackoverflow.com/a/4546633/1271037

答案 1 :(得分:-1)

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

尝试这样的事情:

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