如何创建一个linq查询,其中select列名是一个变量

本文关键字:一个 select 变量 其中 何创建 linq 查询 创建 | 更新日期: 2023-09-27 18:19:56

我有一个配置表,其中包含显示各种数据的权限的各种配置,例如

PermissionTable
key1    key2    showconfig1 showconfig2
1       A            Y             N
2       B            N             N
3       C            Y             Y

各种Web服务的应用程序在代码的不同点对同一个表进行查询,以从不同的showconfig列中获取权限值
如何创建一个通用的集中式查询,应用程序可以传递key1值、key2值和columnName变量来获取特定列行的值,而不必编写单独的查询来查询每一列行,也不必编写查询来检索特定行的所有列值?

例如,下面只返回列名,我希望该列中的值为:

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;
}

如何创建一个linq查询,其中select列名是一个变量

您可以对查询动态应用过滤器,但根据某种类型的条件动态生成或更改结果类型并不容易。类型(匿名或其他类型)是在编译时定义的,而不是在运行时定义的。

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扩展,请参阅http://dynamiclinq.codeplex.com/documentation

有了这个库,你可以选择如下格式的数据:

db.PermissionTable.Select("MyColumn");