- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
tôi đang sử dụng C#
我有一个项目列表,这些项目具有可为空的父 ID 属性。
我需要将其转换为包含其子项列表的项列表,并继续向下传递直到没有项为止。
我现有的类(class)
public class Item
{
public int Id { get; set; }
public int? ParentId { get; set; }
}
我的第一个想法...
创建一个类
public class ItemWithChildren
{
public Item Item { get; set; }
public List Children { get; set; }
}
现在我需要一些方法来获得 List
将所有顶级 Item 对象及其子对象放入 Những đứa trẻ
属性(property)。
请注意,嵌套不是固定的层数。
我希望有一个优雅的 LINQ 查询可以工作。到目前为止,我只有这个……
var itemsWithChildren = items.Select(a => new ItemWithChildren{ Item = a });
câu trả lời hay nhất
对于这个任务,不使用纯 Linq 而是混合使用 Linq 和循环会更具可读性。
给定以下容器:
class Node
{
public int Id { get; set; }
public int? ParentId { get; set; }
public List Children { get; set; }
}
然后你可以用下面的代码来制作树。
var nodes = new List
{
new Node{ Id = 1 },
new Node{ Id = 2 },
new Node{ Id = 3, ParentId = 1 },
new Node{ Id = 4, ParentId = 1 },
new Node{ Id = 5, ParentId = 3 }
};
foreach (var item in nodes)
{
item.Children = nodes.Where(x => x.ParentId.HasValue && x.ParentId == item.Id).ToList();
}
var tree = nodes.Where(x => !x.ParentId.HasValue).ToList();
这将处理任何级别的深度并返回适当的树。
给定以下打印树的方法:
private void PrintTree(IEnumerable nodes, int indent = 0)
{
foreach(var root in nodes)
{
Console.WriteLine(string.Format("{0}{1}", new String('-', indent), root.Id));
PrintTree(root.Children, indent + 1);
}
}
这个调用的输出是:
1
-3
--5
-4
2
如果你想为此使用纯 Linq,你可以执行以下操作,但对我来说它更难阅读:
var tree = nodes.Select(item =>
{
item.Children = nodes.Where(child => child.ParentId.HasValue && child.ParentId == item.Id).ToList();
trả lại sản phẩm;
})
.Where(item => !item.ParentId.HasValue)
.ToList();
关于c# - 从具有父引用的对象创建嵌套的项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472941/
Tôi đang phát triển WebService bằng Java bằng NetBeans và sử dụng gradle làm quản lý phụ thuộc. Tôi tìm thấy bài viết này về cách sử dụng gradle để phát triển các dự án web. Nó sử dụng Gr
Tôi đang di chuyển một dự án cũ từ ant sang gradle (để sử dụng các tính năng xây dựng và quản lý phụ thuộc của nó) và tôi đang gặp vấn đề khi xây dựng > các dự án Eclipse. Vấn đề lớn hiện nay là do dự án có một số dự án con được chia thành các gói war và jar và triển khai để
Tôi đã vật lộn với lỗi này trong một thời gian dài. Tôi sẽ cung cấp một số ảnh chụp nhanh về vấn đề nếu nó hữu ích. Xin hãy hướng dẫn tôi tôi nên làm gì? ? ? ? Đối với tôi, nó trông giống như một mớ hỗn độn. *** đã phát hiện được glibc *** /home/shivam/
Tôi đang chạy NetBeans 7.3 trên Ubuntu 12.10. Tôi đang học lớp Phát triển Web Java, vì vậy tôi có một dự án tên là jsage8 chứa tác phẩm của tôi cho lớp này.
Tôi tự hỏi liệu có dự án nổi bật nào trong Codeplex, GitHub, v.v. là C# và ASP.NET hay thậm chí chỉ là API C# với thử nghiệm chức năng (NUnit) và mô phỏng (RhinoMocks, NMock, v.v.). Nặng
Tôi đã tạo một dự án Maven với kiểu đóng gói "jar" và đặt tên là "Y". Tôi đã thực hiện "Cài đặt Maven" và có thể tìm thấy nó trong kho lưu trữ cục bộ của mình.. Sau đó, tôi đã tạo một dự án khác, Kiểu đóng gói là "war" và là gọi là "X". đây
Tôi đã làm theo hướng dẫn để tích hợp SDK facebook vào ứng dụng của mình. Tôi đã biên dịch và chạy thành công tất cả các ứng dụng mẫu đã cho ngoại trừ "helloFacebookSample".
Tôi muốn biết tại sao chúng tôi (cộng đồng Java) cần dự án Apache Harmony khi đã có dự án OpenJDK. Cả hai đều không được phát hành theo giấy phép nguồn mở phải không? CÂU TRẢ LỜI HAY NHẤT Thực ra hoàn toàn ngược lại. Harmony được thành lập như
Tôi đang cố gắng lấy URL hình thu nhỏ từ một trang web bằng Trình phân tích cú pháp HTML Jsoup. Tôi cần trích xuất tất cả các URL kết thúc bằng 60x60.jpg (hoặc png) (tất cả các URL hình thu nhỏ đều kết thúc bằng URL này) Vấn đề là tôi đưa nó vào
Tôi không thể xây dựng dự án lớp, ngay cả khi tôi chỉnh sửa thuộc tính lớp, tôi gặp lỗi sau: Lỗi:(22, 1) Đã xảy ra sự cố khi đánh giá dự án gốc
Tôi có mã này: var NToDel:NSArray = [] var addInNToDelArray = "Test1 \ Test2" Cách thêm addInN vào NToDel:NSArray
Làm cách nào tôi có thể giới hạn danh sách chủ đề ở mức 5 (mục) sau khi nhấp vào (nút) hiển thị thêm. Còn 3 (mục) nữa và cứ như vậy cho đến hết danh sách thì sẽ hiện ra ít hơn (nút). Ví dụ: Trong tùy chọn bộ lọc của Udemy, khi bạn bấm vào nút Xem thêm thì nó chỉ hiển thị
Làm cách nào để nhập dự án Flutter hiện có dưới dạng dự án gradle? Trình hướng dẫn Nhập dự án yêu cầu đường dẫn về nhà của Gradle. Tôi có gradle, được cài đặt trong hệ thống của tôi. Nhưng cần đặt những gì ở đây (đường dẫn nào). Đây là điều tôi đang cố gắng
Tôi có một dự án về Bitbucket. Chỉ có nguồn được gửi. Để truy xuất dự án sang máy mới, tôi đã sử dụng Kiểm soát phiên bản > Thanh toán từ Ve trong IntelliJ
Vì vậy, tôi muốn thay đổi một trong các dự án của công ty mình để sử dụng một số cài đặt độc lập với IDE. Tôi có rất ít kinh nghiệm thiết lập ứng dụng Java với Tomcat (tôi hầu như không nhớ nó hoạt động như thế nào). Vì vậy để giúp IDE trở nên độc lập
Tôi có 2 dự án riêng biệt, một dự án ở Cocos2dx v3.6 và một dự án ở Swift. Tôi muốn bắt đầu trò chơi từ dự án Swift. Tôi nên làm gì? Mình đã copy toàn bộ project cocos2dx vào project Swift của mình
Chắc chắn là mới đối với Cordova. Đây là các bước tôi đã hoàn thành: kiểm tra dự án hiện có đang chạy cordova build ios ở trên tạo ra lỗi bản dựng này: (node:10242) UnhandledPromiseR
Tôi đang sử dụng JQuery để ẩn/hiển thị li. Yêu cầu của tôi là khi tôi nhấp vào bất kỳ li nào, nó sẽ hiển thị nhưng ẩn tất cả các mục li khác. Khi tôi di chuột qua văn bản 'hiển thị tất cả mục danh sách nhưng không
Tôi muốn di chuyển tất cả các dự án java của mình (223 dự án) sang các dự án cấp độ. Tôi đang sử dụng plugin Gradle Eclipse do nhóm SpringSource STS phát triển. Hiện tại, tất cả các dự án java của tôi
Tôi đã tải xuống Eclipse Luna này, dành cho các nhà phát triển Java EE, như bạn có thể thấy trong phần mô tả, nó hỗ trợ các ứng dụng web. Tôi không thể tìm thấy tệp -> mới -> khác -> dự án web
Tôi là một lập trình viên xuất sắc, rất giỏi!