2017-04-13 83 views
0

是否可以在lambda select語句中添加函數? 這是完全錯誤的語法,但它是爲了演示目的。C#EF Lambda select with function

var test = _context.SomeDatabaseTable 
      .Select(c => new SomeViewModel 
      { 
       AssignedUsers = { 
        foreach (var item in c.AssignedToUserIDs.Split(';').ToList()) { 

         //SOME CODE 

        } 
       } 
      }); 

任何人知道是否有可能我必須循環結果後?

+0

爲什麼你不能簡單地做外 – Sajeetharan

+1

據我所知,這是不可能在EF上作爲代碼不能轉換爲有效的SQL。 – HimBromBeere

+0

你可以用result.Foreach循環答案(r => doSomething); –

回答

2

你不能這樣做的原因是因爲Select()查詢實際上並沒有對數據庫執行查詢,所以EntityFramework試圖將該C#代碼轉換爲SQL,這顯然不能。

在致電Select()之前,您可以致電ToList()執行查詢。

var test = _context.SomeDatabaseTable 
        .ToList() 
        .Select(c => new SomeViewModel 
        { 
         AssignedUsers = c.AssignedToUserIDs.Split(';') 
        }); 

這有其自身的問題,不過,如果你還沒有執行ToList()前過濾查詢正確,你將開始跨越它獲取作爲你的數據庫的規模日益惡化的性能問題來了。

你試圖用那個foreach循環也是無效的。它甚至不應該編譯,因此刪除並使用我上面顯示的內容,我假設AssignedUsers屬性的類型爲'List',如果要修改已拆分的單個元素,可以將另一個Select()方法鏈接到Split()