2017-03-05 66 views
3

拆分字符串我有一個LINQ聲明如下:LINQ到實體上的結果

var playedBanDataList = 
    from bannedPlayers in query 
    select new PlayerBanData 
    { 
     Admin = bannedPlayers.Admin, 
     BannedUntil = bannedPlayers.BannedUntil, 
     IsPermanentBan = bannedPlayers.IsPermanentBan, 
     PlayerName = bannedPlayers.PlayerName, 
     Reason = bannedPlayers.Reason, 
     IpAddresses = bannedPlayers.IpAddresses.Split(new [] {","}, StringSplitOptions.RemoveEmptyEntries).ToList() 
    }; 

    return playedBanDataList.ToList(); 

失敗的原因是拆分功能上IpAddresses作爲LINQ沒有實體無法翻譯此查詢SQL。

這是有道理的,但那麼優雅地完成這個的等效方式是什麼?我想過的唯一方法是手動對檢索到的字符串運行一個循環,然後將其分開,但我想一次性完成。

+0

您可能希望在對其進行foreach之前先執行該查詢。 –

+0

@ChetanRanpariya這正是我想避免做的第一位,除非沒有其他方法 – Xiagua

回答

2

您可以使用AsEnumerable使選擇發生在內存而不是EF中。

var playedBanDataList = query.AsEnumerable() 
    .Select(bannedPlayers => new PlayerBanData 
    { 
     Admin = bannedPlayers.Admin, 
     BannedUntil = bannedPlayers.BannedUntil, 
     IsPermanentBan = bannedPlayers.IsPermanentBan, 
     PlayerName = bannedPlayers.PlayerName, 
     Reason = bannedPlayers.Reason, 
     IpAddresses = bannedPlayers.IpAddresses.Split(
      new [] {","}, 
      StringSplitOptions.RemoveEmptyEntries).ToList() 
    });