首页 > 解决方案 > 带有字符串连接的 LINQ 动态表达式

问题描述

我从当前项目中获得了此代码

public Expression<Func<MyObject, object>> CreateSelectExp(a, b)
{
    return x => new
    {
        x.Id,
        x.Status,
        x.DateCreated,
        x.Theme,
        Message = MergeMessage(db, x.Id)
    };
}

private IQueryable<string> MergeMessage(ConnectTo db, Guid id)
{
     return db.MsgHistory
         .Where(s => s.FK_MsgHistory_MsgID.Id == id)
         .Where(s => !string.IsNullOrEmpty(s.Message))
         .Select(s => String.Join(Environment.NewLine, s.Message));
}

我得到的是 IQueryable ,它最终(在客户端)看起来像这样["Text One","Text Two", "Text Three"],但我需要的是一个这样的字符串Text One, Text Two, Text Three。由于我在 中有一个 SQL 表达式字符串CreateSelectExp(),因此我无法在其中获取任何 List() 或 Array() 。我读过关于聚合的文章,但我所有的尝试都没有结果。所以问题是如何用 linq 表达式获得一个合并的字符串?

标签: c#sqllinqexpression

解决方案


string.Join(
    "\n",
    db.MsgHistory
    .Where(s => s.FK_MsgHistory_MsgID.Id == id)
    .Where(s => !string.IsNullOrEmpty(s.Message))
    .Select(s => s.Message))

应该做的伎俩

编辑:如果您想要一行中的所有内容,您可以使用不同的分隔符,例如“,”。


推荐阅读