Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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# 从变量列投影的C Linq到SQL查询_C#_Mysql_Sql_Linq_Projection - Fatal编程技术网

C# 从变量列投影的C Linq到SQL查询

C# 从变量列投影的C Linq到SQL查询,c#,mysql,sql,linq,projection,C#,Mysql,Sql,Linq,Projection,我有代码可以在许多不同的系统上运行,每个系统都有自己的名称来标识系统,以及客户是否可以访问该系统 permissions表是一个没有外键的遗留MySQL表,它还没有准备好以更好的形式为MSSQL进行规范化和重写。这是一个长期项目,许多应用程序必须先重写。这就是为什么我使用显式连接而不是外键样式的查询。现在就这样吧 基本代码说明了问题/问题: using (var dc = new MySqlDataContext()) { var queryResult = (from c in dc.

我有代码可以在许多不同的系统上运行,每个系统都有自己的名称来标识系统,以及客户是否可以访问该系统

permissions表是一个没有外键的遗留MySQL表,它还没有准备好以更好的形式为MSSQL进行规范化和重写。这是一个长期项目,许多应用程序必须先重写。这就是为什么我使用显式连接而不是外键样式的查询。现在就这样吧

基本代码说明了问题/问题:

using (var dc = new MySqlDataContext())
{
    var queryResult = (from c in dc.Customers
        join m in dc.MembershipGroups on c.MembershipGroup equals m.MembershipName
        where ((c.MembershipGroup != "Demo" && c.LastActivity > DateTime.Now.AddDays(-365)) ||
                (c.MembershipGroup == "Demo" && c.LastActivity > DateTime.Now.AddDays(-120) && c.Points+c.PromoPoints > 10))
        select new
        {
            c.Username,
            c.AccountPassword,
            c.FirstName,
            c.LastName,
            c.Points,
            c.PromoPoints,
            c.DeleteAccount,
            c.MembershipDate,
            c.MembershipGroup,
            c.LastActivity,
            m.<variant column>
        });
}
这是投影中的最后一行项目。我之所以使用投影,是因为这个遗留表对于场中的每个可能系统都有一列。。。。总共超过200列。我只需要这些代码来检索运行它的系统的列

例如,如果此计算机是SYSTEM_014,则“成员资格组”表中有一列名为SYSTEM_014,其中包含关于此特定成员资格组是否具有使用SYSTEM_014的权限的是或否

我不想简单地选择all,因为对于查询将返回的数千个客户中的每一个,这将返回成员组中的所有200+列。是的,它必须返回20K+客户数据库的一个重要子集-这就是本程序的目的![**]这就是投影

我如何编写这个Linq查询来伪参数化查询数据的实际列名?在where条件上进行常规参数化很容易,但我找不到任何关于如何在运行时改变查询的源列的信息

任何帮助都将不胜感激


**出于好奇,至于为什么我需要在一个结果集中查询数千名客户,我依赖于一个不使用数据库进行用户访问控制的遗留应用程序。看在皮特的份上,它实际上在Windows注册表中存储特权!因此,我正在编写一个应用程序,将符合条件的客户记录从我们的数据库中提取出来,并将结果集解析为一个.REG文件,可以执行该文件以使用更新的权限更新注册表。不,我不能离开这个独一无二的第三方应用。因此,查询批次,炸出一个.REG文件,然后启动它,这比用C语言逐行操作注册表要快得多——这就是现在的操作方式,非常非常缓慢。移动到这种格式将加快四个数量级,我正在利用机会来替换ADO代码,在那里很容易将文本查询字符串连接起来,然后用更干净的LINQ代码提交。

你会考虑使用动态LINQ之类的东西吗?这将允许您写出字段名,并将其反射回数据库中的列。DynamicLinq是否也可以与Devart的dotConnect for MySQL配合使用?我也被锁定使用它,因为基于Oracle的6.8.3连接器有一个bug,它不能很好地使用备用端口号,还有太多其他东西仍然在我的自定义端口号上寻找MySQL。