簡體   English   中英

string.Join 實體框架,LINQ 到 SQL。 沒有客戶端評估

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM