将列表联接到字符串中



我需要将字符串列表连接到linq select中的字符串中。 我试过了:

var myEnt = from p in ctx.Project
select new ProjectRepository.Project
{
Id = p.ProjectId,
Desc = p.ProjectDesc,
UsersProject = String.Join("; ", (
from up in ctx.usersProject join u in ctx.users
on up.user equals u.id into uloj from uj in uloj.DefaultIfEmpty()
where (up.deleted ?? false) == false
&& up.projectId == p.Id
&& (uj.deleted ?? false) == false
select uj.name + " " + uj.surname).ToList())
});
gridProg.DataSource = myEnt.ToList();
gridProg.DataBind();

但是我有这个错误:

不支持直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery、DbRawSqlQuery(的数据绑定。而是用数据填充数据库集,例如,通过在 DbSet 上调用 Load 来绑定到本地数据。对于 WPF 绑定到 DbSet.Local。对于 WinForms 绑定到 DbSet.Local.ToBindingList((。对于 ASP.NET WebForms,您可以绑定到在查询上调用 ToList(( 的结果或使用模型绑定,有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkId=389592。

谢谢。

更新

添加 后出现新错误。Tolist(( 到数据源绑定。

LINQ to Entities 无法识别方法"System.String Join(System.String, System.Collections.Generic.IEnumerable'1[System.String]("方法,并且此方法无法转换为存储表达式。

我还没有测试过它,但它会起作用。进行 2 个不同的查询

var Projects = (from up in ctx.usersProject join u in ctx.users
on up.user equals u.id into uloj from uj in uloj.DefaultIfEmpty()
where (up.deleted ?? false) == false
&& up.projectId == p.Id
&& (uj.deleted ?? false) == false
select new { 
ProjectId = up.projectId, 
ProjectsList = uj.name + " " + uj.surname
}).ToList();
var myEnt = from p in ctx.Project.AsEnumerable()
select new ProjectRepository.Project
{
Id = p.ProjectId,
Desc = p.ProjectDesc,
UsersProject = String.Join("; ", Projects.Where(e=> p.ProjectId == e.ProjectId).Select(e=> e.ProjectsList).ToList())
}).ToList();

我找到了解决方案。我发布下面的代码:

var usersProject = (from up in ctx.usersProject join u in ctx.users
on up.user equals u.id into uloj from uj in uloj.DefaultIfEmpty()
where (up.deleted ?? false) == false
&& up.projectId == p.Id
&& (uj.deleted ?? false) == false
select new { 
ProjectId = up.projectId, 
User = uj.name + " " + uj.surname
}).ToList();
var myEnt = from p in ctx.Project.AsEnumerable()
select new ProjectRepository.Project
{
Id = p.ProjectId,
Desc = p.ProjectDesc
}).ToList();
var myEntL = myEnt.ToList();
foreach (var mysingleEnt in myEntL)
{
myEntL.Where(x => x.Id == mysingleEnt.Id).FirstOrDefault().utentiAssociati =
String.Join("; ", usersProject
.Where(x => x.ProjectId == mysingleEnt.Id).Select(x => x.User).ToList());
}
gridProg.DataSource = myEntL;
gridProg.DataBind();

谢谢你的帮助。

最新更新