如何在 C# .net 核心的 SQL 服务器子查询中获取多个列作为列表

How to get multiple columns as list in SQL Server sub queries for C# .net core

我已经这样做了,很好..

ALTER PROCEDURE [dbo].[getStateWiseCompany]
AS
BEGIN
    DECLARE @ProposalActualTemp TABLE
                                (
                                    RegionId    INT,
                                    Code        NVARCHAR(MAX),
                                    CompanyName NVARCHAR(MAX),
                                    FirstName   NVARCHAR(MAX),
                                    OfficePhone FLOAT
                                );

    INSERT INTO @ProposalActualTemp
        SELECT 
            Companies.RegionId, Companies.Code,
            Companies.CompanyName,
            Users.FirstName,
            Companies.OfficePhone
        FROM 
            Companies
        INNER JOIN 
            Users ON Companies.DirectorId = Users.Id;

    SELECT 
        States.Id AS Id,
        States.StateName,
        States.IsRegion AS STATUS,
        Users.FirstName + ' ' + Users.LastName AS RegionDirector,
        ISNULL(Users.PhoneNumber, '') AS PhoneNumber,
        (SELECT 
             Code, CompanyName, FirstName, OfficePhone
         FROM @ProposalActualTemp
         WHERE RegionId = States.Id 
         FOR XML PATH('CompanyList'), ROOT('StateWiseCompanyGroup'), TYPE) AS CompanyListString
     FROM 
         States
     INNER JOIN 
         Users ON States.RegionDirector = Users.Id;
END;

但是不使用xml序列化是否可行?

示例:

SELECT
    table1.Id,
    table1.Name,
    (SELECT data1, data2 FROM table2 WHERE table2.table1Id = table1.Id)
FROM
    table1

这样的东西可以直接插入到 .NET Core / Entity Framework Core 模型中吗?

我不完全清楚这些查询的总体目标 is/what 对您有何作用(示例输出会有所帮助),但似乎对 role/intention 的 [=] 存在误解30=]

因为它对实体(如用户、州、公司)建模,并了解当这些事物在 1:1、1:many 或 many:many 中相互关联时如何与它们合作方式,你不应该专注于“编写一个 sql 查询 returns 一个单一的状态,并在其列之一中列出其所有公司的列表”的目标 - 这就是 EF 所做的为你。你会告诉 EF(或者让它按照惯例解决)一个州有一个公司列表,然后你会检索一些州(比如说所有在南方的州),他们会有一个列表 属性 引用了他们的多个公司。您不需要对州 ID 1 的公司列表中的公司列表进行微观管理; EF 确保其中的 Company 对象包含与状态 1

相关的所有公司

EF 如何选择形成该列表取决于 EF - 也许它使用 SELECT * FROM states WHERE region = 'south' 检索了南部各州的列表,获得了 10 个州然后遍历列表 运行 10 个 [= 的查询11=]。也许它 运行 SELECT * FROM companies WHERE stateid IN (SELECT ID FROM states WHERE states.region = 'south')。也许它甚至 运行 加入版本 SELECT * FROM companies INNER JOIN states ON ... WHERE states.region = 'south' 然后整理出重复的状态数据。如果您只请求状态,它甚至可能不会尝试为状态加载公司(作为一个概念,这称为延迟加载);如果您曾经访问过 Companies 集合,它可以稍后加载它,它可以选择加载整个集合,或者它可以选择只加载一个或一些,这取决于您在访问该集合时提供的另一个谓词

关键是幕后发生的事情并不重要,因为这是 EF 的关注点,而且 EF 团队已经(随着时间的推移改变了他们的想法,但他们)想出了如何做并隐藏它在一个抽象下为您提供一个或多个国家及其所有庄严的财产,并且在那里还有某种 list/collection 相关的公司实体。您不必担心自己捏造某种 F运行kenstein“带有内置公司列表的字符串,该字符串被解压缩到作为 StateCompanies 怪物的一部分的列表中”,您只需为您的模型建模State 作为具有简单属性的对象和与其相关的其他对象的集合,EF 处理必要的机制以确保当您拥有 State 时,它​​ 看起来像前端 一样对象中内置的相关公司的集合