C# 如何创建select列名为变量的linq查询
我有一个配置表,其中包含用于显示各种数据的权限的各种配置,例如C# 如何创建select列名为变量的linq查询,c#,linq,C#,Linq,我有一个配置表,其中包含用于显示各种数据的权限的各种配置,例如 PermissionTable key1 key2 showconfig1 showconfig2 1 A Y N 2 B N N 3 C Y Y 各种Web服务的应用程序在代码中的不同点对同一个表进行查询,以从不同的showconfig列获取权限
PermissionTable
key1 key2 showconfig1 showconfig2
1 A Y N
2 B N N
3 C Y Y
各种Web服务的应用程序在代码中的不同点对同一个表进行查询,以从不同的showconfig列获取权限值。我如何创建一个通用的集中式查询,其中应用程序可以传递key1值、key2value和columnName变量以获取特定列行的值,而不必编写单独的查询来查询每个列行,也不必编写查询来检索特定行的所有列值 e、 g.以下仅返回我希望该列中的值的列名:
public string GetPermission(int key1, int key2 ,string columnName)
{
string show = "N";
var show = (from p in db.PermissionTable
where p.key1== key1
&& p.key2 == key2
select p.[columnName]).FirstOrDefault().ToString();
return show;
}
您可以对查询动态应用过滤器,但根据某种类型的条件动态生成或更改结果类型并不容易。类型(匿名或其他)是在编译时定义的,而不是在运行时定义的
var result = from p in db.PermissionTable
select new { p.ColumnName, p.Key1, p.Key2 };
if(condition1)
result = result.Where(i => i.Key1 == filter1);
if(condition2)
result = result.Where(i => i.Key2 > 0);
var result2 = from p in result
select p.ColumnName;
return result2.FirstOrDefault().ToString();
如果您确实需要根据不同的条件改变查询列,我认为有多个查询是合理的。您可以使用动态linq扩展,请参阅 使用此库,您可以选择以下格式的数据:
db.PermissionTable.Select("MyColumn");
在这个可能的副本上有一个线程:为什么不选择所有对象,然后使用反射提取属性?首先,它是Table的糟糕设计,您需要使用Linq进行此操作有具体原因吗?如果你不得不浪费大量的时间来解决这个问题,这并不是最好的方案。如果您真的想使用Linq,请编写一个以列名作为参数的存储过程,然后在sql中选择该列。您可以将Linq中存储的过程映射到Sql,它只返回您请求的值。