如何在网页上将多个数据库行显示为单个条目

时间:2013-02-15 15:48:03

标签: sql-server asp.net-mvc entity-framework webforms

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

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

由于数据库中的连接,数据会出现两行,因此数据会出现两次: enter image description here

这就是我想要的:

enter image description here

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

使用EF时,这是否正常或是否有优雅的方式?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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