Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建select列名为变量的linq查询_C#_Linq - Fatal编程技术网

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,它只返回您请求的值。