我们可以使用以下查询使用Entity Framework检索特定列:
var result = context.Contents.Where(c => c.CatalogId == "ABC")
.Select(c => new {c.ContentId, c.ContentName});
我想在运行时传递列名。
我可以在运行时动态传递这些列名{c.ContentId, c.ContentName}
。
由于
答案 0 :(得分:3)
您必须在运行时构造一个lambda表达式才能工作。有一些像Dynamic LINQ这样的库可以为你做一些工作,而Expression API本身并不是很糟糕,但是我觉得它变得比那时更值得付出努力。最简单的方法就是回退到简单的参数化SQL:
var fields = new[] { "ContentId", "ContentName" };
var q = "SELECT " + string.Join(", ", fields) + " WHERE CatalogId = @Id";
var result = context.Database.SqlQuery<dynamic>(q, new SqlParameter("Id", "ABC"));
注意:绝对确定此处的字段名称不是来自用户输入,因为如果您不这样做,那么您将自己打开SQL注入。有一些方法可以稍微扭曲查询以避免SQL注入(在参数化的查询中添加变量,对变量执行切换案例以选择字段),但这超出了本答案的范围。最好完全避免将未知来源的字符串插入到SQL中。