LINQ to Entities如何将字符串拆分为结果?

7

我有一个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();

这个查询失败是因为split函数在IpAddresses上失效,因为LINQ to Entities无法将此查询翻译成SQL。

这很有道理,但那么有没有一种等效的优雅方法来实现呢?我想到的唯一方法是手动在检索到的字符串上运行循环然后拆分它,但我希望能一次性完成。


在使用foreach之前,您可能需要先执行查询。 - Chetan
@ChetanRanpariya 这正是我首先想要避免做的事情,除非没有其他解决办法。 - Xiagua
1个回答

5
你可以使用 AsEnumerable 来将 select 操作从 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()
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接