gpt4 book ai didi

c# - Linq to SQL 分组子关系

转载 作者:行者123 更新时间:2023-11-30 21:26:19 24 4
gpt4 key购买 nike

我正在尝试运行 LINQ to SQL 查询,该查询在搜索引擎样式列表的 GridView 中返回结果。

在下面的简化示例中,是否可以在单个查询中使用父项 (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 />"
};

提前致谢。

最佳答案

您的连接会搞砸您的基数!您没有 parent 的名单!

这是一些未经测试的徒手代码。在 Linq 设计器中添加关系可为您提供关系属性。 String.Join 会将列表放在一起。

我添加了两个可选的方法调用。

Where ... Any 会将 parent 过滤为只有那些有 child 的 parent 。我不确定 string.Join 在空数组上的行为。

ToList 会将 Parents 拉入内存,子级将通过进一步的数据库调用访问。如果您遇到运行时 string.Join 不受 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();

另请注意:通常您不希望混合数据和标记,直到数据被正确转义以用于标记。

关于c# - Linq to SQL 分组子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/115955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com