我将尝试设置一个场景以使我的示例清晰,但假设我的SQL Server数据库有2个表,一个有人名,DOB,喜欢的颜色和ID,另一个表有personID和电子邮件。这是一对多关系(许多电子邮件地址为1人)。我们假设只有一个人有2个电子邮件地址。当我在我的网页上显示SELECT *
的结果时,我会看到2行,唯一的区别是电子邮件地址(和ID,但是对于这个例子,我不会显示ID的结果)。 / p>
我的问题是,我们如何解决此问题,将其显示为只有一个“项目”,并且电子邮件以逗号分隔。请将这些图像视为之前和之后:
由于数据库中的连接,数据会出现两行,因此数据会出现两次:
这就是我想要的:
在我的网页中,我按ID记录结果,记下当前ID并将其与每次迭代的先前ID进行比较,如果匹配,请继续显示电子邮件的结果,直到previousID与recentId不同。这也意味着以前记录了喜欢的颜色作为变量,并在没有更多匹配ID时显示它(我希望这是有道理的)。
使用EF时,这是否正常或是否有优雅的方式?
答案 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