gpt4 book ai didi

c# - 在 Entity Framework 中动态传递要在运行时选择的列名称

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:15 25 4
gpt4 key购买 nike

我们可以使用以下查询通过 Entity Framework 检索特定列:

var result = context.Contents.Where(c => c.CatalogId == "ABC")
.Select(c => new {c.ContentId, c.ContentName});

我想在运行时传递列名。我可以{c.ContentId, c.ContentName}在运行时动态传递这些列名吗?

谢谢

最佳答案

您必须在运行时构造一个 lambda 表达式才能使其工作。有诸如 Dynamic LINQ 之类的库可以为您完成一些工作,并且 Expression API 本身并不算太糟糕,但我觉得在这一点上付出的努力超出了它的值(value)。最简单的方法就是退回到普通的参数化 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 注入(inject)。有一些方法可以稍微扭曲查询以避免 SQL 注入(inject)(在参数化的查询中添加一个变量,对变量执行 switch case 以选择字段),但这超出了这个答案的范围。最好完全避免将来自未知来源的字符串插入到您的 SQL 中。

关于c# - 在 Entity Framework 中动态传递要在运行时选择的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31091309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com