0

我将尝试设置一个场景以使我的示例更清晰,但假设我的 SQL Server 数据库有 2 个表,一个带有人名、出生日期、最喜欢的颜色和 ID,另一个带有 personID 和电子邮件的表。这是一对多的关系(1 个人的许多电子邮件地址)。假设只有 1 个人有 2 个电子邮件地址。当我SELECT *在我的网页上显示 a 的结果时,我会看到 2 行,唯一的区别是电子邮件地址(和 ID,但对于本示例,我不会显示 ID 的结果)。

我的问题是,我们如何解决这个问题以将其显示为仅一个“项目”并且电子邮件以逗号分隔。请考虑这些图像之前和之后:

由于数据库中的连接,数据将出现两次,因为它们是 2 行: 在此处输入图像描述

这就是我想要的:

在此处输入图像描述

在我的网页中,我按 ID 对结果进行排序,记下当前 ID,并将其与每次迭代的前一个 ID 进行比较,如果匹配,则继续显示电子邮件的结果,直到 previousID 与 recentId 不同。这也意味着之前将最喜欢的颜色记为变量并在没有更多匹配 ID 时显示它(我希望这是有道理的)。

这可以吗,或者在使用 EF 时有一种优雅的方式吗?

4

2 回答 2

1

尝试使用 xml 路径:

select name, dob, substring(emails, 1, len(emails) - 1) as emails
from (
    select name, dob, (select email + ', '
                       from PersonEmail
                       for xml path('')) as emails
    from Person
) t
于 2013-02-15T17:37:27.900 回答
1

在列出电子邮件的数据库中创建一个函数。

CREATE FUNCTION PersonEmails
(
    -- Add the parameters for the function here
    @PersonID INT
) 

DECLARE @emailList VARCHAR(500)

SELECT @emailList = COALESCE(@emailList + ', ' , '') + email
    FROM PersonEmailTable
    WHERE PersonId = @PersonID

SELECT @emailList

然后在您的 SQL 查询中调用该函数

SELECT Persons.*, dbo.PersonEmails(Persons.ID) as Emails FROM Persons
于 2013-02-15T16:16:18.657 回答