Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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# Linq To Sql Concat()在创建的TSQL中删除字段_C#_Sql Server_Tsql_Linq To Sql - Fatal编程技术网

C# Linq To Sql Concat()在创建的TSQL中删除字段

C# Linq To Sql Concat()在创建的TSQL中删除字段,c#,sql-server,tsql,linq-to-sql,C#,Sql Server,Tsql,Linq To Sql,这很奇怪。 我正在将存储的进程移动到服务。TSQL将进行多次选择。为了复制这一点,我创建了多个查询,生成了一个通用的新具体类型。然后我发出一个返回结果。ToString;结果SQL选择指定了不同数量的列,因此导致MSSQL Msg 205 using (var db = GetDb()) { var fundInv = from f in db.funds select

这很奇怪。 我正在将存储的进程移动到服务。TSQL将进行多次选择。为了复制这一点,我创建了多个查询,生成了一个通用的新具体类型。然后我发出一个返回结果。ToString;结果SQL选择指定了不同数量的列,因此导致MSSQL Msg 205

 using (var db = GetDb())
        {
             var fundInv = from f in db.funds
                          select
                                  new Investments
                                      {
                                              Company = f.company,
                                              FullName = f.fullname,
                                              Admin = f.admin,
                                              Fund = f.fund1,
                                              FundCode = f.fundcode,
                                              Source = STR_FUNDS,
                                              IsPortfolio = false,
                                              IsActive = f.active,
                                              Strategy = f.strategy,
                                              SubStrategy = f.substrategy,
                                              AltStrategy = f.altstrategy,
                                              AltSubStrategy = f.altsubstrategy,
                                              Region = f.region,
                                              AltRegion = f.altregion,
                                              UseAlternate = f.usealt,
                                              ClassesAllowed = f.classallowed
                                      };



             var stocksInv = from s in db.stocks
                            where !fundInv.Select(f => f.Company).Contains(s.vehcode)                                 select
                                    new Investments
                                        {
                                                Company = s.company,
                                                FullName = s.issuer,
                                                Admin = STR_PRS,
                                                Fund = s.shortname,
                                                FundCode = s.vehcode,
                                                Source = STR_STOCK,
                                                IsPortfolio = false,
                                                IsActive = (s.inactive == null),
                                                Strategy = s.style,
                                                SubStrategy = s.substyle,
                                                AltStrategy = s.altstyle,
                                                AltSubStrategy = s.altsubsty,
                                                Region = s.geography,
                                                AltRegion = s.altgeo,
                                                UseAlternate = s.usealt,
                                                ClassesAllowed = STR_GENERIC
                                        };


            var bondsInv = from oi in db.bonds
                           where !fundInv.Select(f => f.Company).Contains(oi.vehcode)
                           select
                                   new Investments
                                       {
                                               Company = string.Empty,
                                               FullName = oi.issue,
                                               Admin = STR_PRS1,
                                               Fund = oi.issue,
                                               FundCode = oi.vehcode,
                                               Source = STR_BONDS,
                                               IsPortfolio = false,
                                               IsActive = oi.closed,
                                               Strategy = STR_OTH,
                                               SubStrategy = STR_OTH,
                                               AltStrategy = STR_OTH,
                                               AltSubStrategy = STR_OTH,
                                               Region = STR_OTH,
                                               AltRegion = STR_OTH,
                                               UseAlternate = false,
                                               ClassesAllowed = STR_GENERIC
                                       };

            return (fundInv.Concat(stocksInv).Concat(bondsInv)).ToList();
        }
上面的代码生成一个复杂的select语句,其中上面的每个表都有不同的列计数。请看下面的SQL,我已经尝试了一些方法,但还没有改变。欢迎提出意见

SELECT [t6].[company] AS [Company], 
    [t6].[fullname] AS [FullName], 
    [t6].[admin] AS [Admin], 
    [t6].[fund] AS [Fund], 
    [t6].[fundcode] AS [FundCode], 
    [t6].[value] AS [Source], 
    [t6].[value2] AS [IsPortfolio], 
    [t6].[active] AS [IsActive], 
    [t6].[strategy] AS [Strategy], 
    [t6].[substrategy] AS [SubStrategy], 
    [t6].[altstrategy] AS [AltStrategy], 
    [t6].[altsubstrategy] AS [AltSubStrategy], 
    [t6].[region] AS [Region], 
    [t6].[altregion] AS [AltRegion], 
    [t6].[usealt] AS [UseAlternate], 
    [t6].[classallowed] AS [ClassesAllowed]
FROM (
    SELECT [t3].[company], 
        [t3].[fullname], 
        [t3].[admin], 
        [t3].[fund], 
        [t3].[fundcode], 
        [t3].[value], 
        [t3].[value2], 
        [t3].[active], 
        [t3].[strategy], 
        [t3].[substrategy], 
        [t3].[altstrategy], 
        [t3].[altsubstrategy], 
        [t3].[region], 
        [t3].[altregion], 
        [t3].[usealt], 
        [t3].[classallowed]
FROM (
    SELECT [t0].[company], 
        [t0].[fullname], 
        [t0].[admin], 
        [t0].[fund], 
        [t0].[fundcode], 
        @p0 AS [value], 
        [t0].[active], 
        [t0].[strategy], 
        [t0].[substrategy], 
        [t0].[altstrategy], 
        [t0].[altsubstrategy], 
        [t0].[region], 
        [t0].[altregion], 
        [t0].[usealt], 
        [t0].[classallowed]
    FROM [zInvest].[funds] AS [t0]
    UNION ALL
    SELECT [t1].[company], 
        [t1].[issuer], 
        @p6 AS [value], 
        [t1].[shortname], 
        [t1].[vehcode], 
        @p7 AS [value2], 
        @p8 AS [value3],  
        (CASE 
            WHEN [t1].[inactive] IS NULL THEN 1
            ELSE 0
        END) AS [value5], 
        [t1].[style], 
        [t1].[substyle], 
        [t1].[altstyle], 
        [t1].[altsubsty], 
        [t1].[geography], 
        [t1].[altgeo], 
        [t1].[usealt], 
        @p10 AS [value6]
    FROM [zBank].[stocks] AS [t1]
    WHERE (NOT (EXISTS(
        SELECT NULL AS [EMPTY]
        FROM [zInvest].[funds] AS [t2]
        WHERE [t2].[company] = [t1].[vehcode]
        ))) AND ([t1].[vehcode] <> @p2) AND (SUBSTRING([t1].[vehcode], @p3 + 1, @p4) <> @p5)
    ) AS [t3]
UNION ALL
SELECT @p11 AS [value], 
    [t4].[issue], 
    @p12 AS [value2], 
    [t4].[vehcode], 
    @p13 AS [value3], 
    @p14 AS [value4], 
    [t4].[closed], 
    @p16 AS [value6], 
    @p17 AS [value7]
FROM [zMut].[bonds] AS [t4]
WHERE NOT (EXISTS(
    SELECT NULL AS [EMPTY]
    FROM [zInvest].[funds] AS [t5]
    WHERE [t5].[company] = [t4].[vehcode]
    ))
) AS [t6]

我认为这是LINQtoSQL中的一个bug。你可以在这里找到它:


希望这里给出的解决方法对您有用。

认为这是LINQ to SQL中的一个bug。你可以在这里找到它:


希望这里给出的解决方法对您有用。

我认为您是对的。我尝试在所有列上使用ToString,但没有成功。我分别运行我的查询,然后对结果使用concat。据我所知,这是有效的。幸运的是,查询是这样的,因此解决方案没有进行太多更改。我会检查这方面的表现。我想你是对的。我尝试在所有列上使用ToString,但没有成功。我分别运行我的查询,然后对结果使用concat。据我所知,这是有效的。幸运的是,查询是这样的,因此解决方案没有进行太多更改。我会检查这方面的性能。