我有当前项目中的这段代码
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
。由于我在CreateSelectExp()
中有一个SQL表达式字符串,因此无法在其中获得任何List()或Array()。
我读过有关Aggregate的文章,但是我的所有尝试都没有结果。因此,问题是如何使用linq表达式获取单个合并的字符串?
答案 0 :(得分:0)
string.Join(
"\n",
db.MsgHistory
.Where(s => s.FK_MsgHistory_MsgID.Id == id)
.Where(s => !string.IsNullOrEmpty(s.Message))
.Select(s => s.Message))
应该做到这一点
编辑: 如果您希望所有内容都在一行中,则可以使用不同的分隔符,例如“,”。
答案 1 :(得分:0)
您将返回IQueryable<string>
类型的集合。您需要返回一个字符串。
private string MergeMessage(ConnectTo db, Guid id)
{
return string.Join(", ",
db.MsgHistory
.Where(s => s.FK_MsgHistory_MsgID.Id == id)
.Where(s => !string.IsNullOrEmpty(s.Message))
.Select(s => s.Message))
}