string.Join 在实体框架中,LINQ to SQL。没有客户端评估

string.Join in Entity framwork, LINQ to SQL. Without Client-side evaluation

如果你有table,类似于here:

DataTypeID, DataValue
1,"Value1"
1,"Value2"
2,"Value3"
3,"Value4"

并想要这样的输出:

DataTypeID,DataValues
1,"Value1,Value2"
2,"Value3"
3,"Value4"

大多数问题建议 使用 toList() 或 AsEnumerable(),然后 string.Join(", ", DataValues) 在客户端。如果数据不是很大,这可能会奏效,但它违背了使用 EF 的目的。如何在不加载内存中的所有数据的情况下执行此操作?

好吧,根据这个 this issue,string.Join() 尚未实施(截至目前)并且 IEnumerable.Aggregate 也不会翻译。
与此同时,您可以创建一个视图并在其中写入您的SQL。 例如,按 id 和 string.Join(", ", Names);

分组
CREATE VIEW V_Name AS
SELECT ID,  
Names=STUFF  
(  
    (  
      SELECT DISTINCT ' || '+ CAST(Child.Name AS VARCHAR(MAX))  
      FROM Child,MainTable
      WHERE Main.ID= t1.ID --this line is imp...
      AND Child.ID=MainTable.ID
      FOR XMl PATH('')  
    ),1,1,''  
)  
FROM MainTable t1 
GROUP BY t1.IDReview 

CREATE VIEW V_Name AS
SELECT ID, STRING_AGG(Name, ', ') AS Names
FROM MainTable
LEFT JOIN ChildTable ON MainTable.ID = ChildTable.ID
GROUP BY ID

现在,在您的 C# 中,您可以简单地将其与您的 ID 连接起来,就像您通常使用 IQueryable 一样:

       from data in _dbcontext.sometable
       join groupedAndJoinedNames in _dbcontext.viewname
                on data.ID equals groupedAndJoinedNames.ID
       select new
       {
            Names = groupedAndJoinedNames.Names
       }