【问题标题】:LINQ to Entities split string on resultLINQ to Entities 根据结果拆分字符串
【发布时间】:2017-03-05 00:35:53
【问题描述】:

我有一个 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 to Entities 无法将此查询转换为 SQL。

这是有道理的,但是有什么等效的方法可以优雅地完成这个任务呢?我想到的唯一方法是在检索到的字符串上手动运行一个循环,然后将其拆分,但我想一口气搞定。

【问题讨论】:

  • 您可能希望先执行查询,然后再对其执行 foreach。
  • @ChetanRanpariya 这正是我首先要避免做的事情,除非没有其他办法

标签: c# sql entity-framework linq orm


【解决方案1】:

您可以使用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()
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    相关资源
    最近更新 更多