[英]string.Join in Entity framwork, LINQ to SQL. Without Client-side evaluation
如果你有一張桌子,類似於這里:
DataTypeID, DataValue
1,"Value1"
1,"Value2"
2,"Value3"
3,"Value4"
並希望 output 像這樣:
DataTypeID,DataValues
1,"Value1,Value2"
2,"Value3"
3,"Value4"
大多數問題都建議像這樣使用 toList() 或 AsEnumerable() ,然后在客戶端使用 string.Join(", ", DataValues) 。 如果數據不是很大,這可能會起作用,但它違背了使用 EF 的目的。 如何在不加載內存中的所有數據的情況下做到這一點?
好吧,根據這個問題, 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.