我正在尝试运行LINQ to SQL查询,该查询在搜索引擎样式列表的网格视图中返回结果。
在下面的简化示例中,是否可以使用逗号分隔的列表来填充集合,该列表包含父查询(NAMESOFCHILDREN)在单个查询中的所有子项?
var family = from p in db.Parents
where p.ParentId == Convert.ToInt32(Request.QueryString["parentId"])
join pcl in db.ParentChildLookup on p.ParentId equals pcl.ParentId
join c in db.Children on pcl.ChildId equals c.ChildId
select new
{
Family = "Name: " + p.ParentName + "<br />" +
"Children: " + NAMESOFCHILDREN? + "<br />"
};
提前致谢。
发布于 2018-08-29 10:29:09
你的加入会搞砸你的基数!你没有父母的名单!
这是一些未经测试的自由手代码。在Linq设计器中添加关系可为您提供关系属性。String.Join将列表放在一起。
我添加了两个可选的方法调用。
在哪里......任何人 都会将父母过滤给那些有孩子的父母。我不确定string.Join在空数组上的行为。
ToList会将Parent压入内存,进一步的数据库调用将访问子节点。如果获得运行时字符串,则可能需要这样做.SQL转换器异常不支持。这个异常意味着LINQ试图将方法调用转换为SQL Server可以理解的东西 - 并且失败了。
int parentID = Convert.ToInt32(Request.QueryString["parentId"]);
List<string> result =
db.Parents
.Where(p => p.ParentId == parentID)
//.Where(p => p.ParentChildLookup.Children.Any())
//.ToList()
.Select(p =>
"Name: " + p.ParentName + "<br />" +
"Children: " + String.Join(", ", p.ParentChildLookup.Children.Select(c => c.Name).ToArray() + "<br />"
)).ToList();
另请注意:通常,您不希望混合数据和标记,直到数据被正确转义以进行标记。
发布于 2018-08-29 11:11:19
你可以尝试如下:
var family = from p in db.Parents
where p.ParentId == Convert.ToInt32(Request.QueryString["parentId"])
join pcl in db.ParentChildLookup on p.ParentId equals pcl.ParentId
select new {
Family = "Name: " + p.ParentName + "<br />" + string.Join(",",(from c in db.Children where c.ChildId equals pcl.ChildId select c.ChildId.ToString()).ToArray());
};
https://stackoverflow.com/questions/-100000683
复制相似问题