Tôi có một lớp thực hiện IEnumerable
nhưng không triển khai IEnumerable<T>
. Tôi không thể thay đổi lớp này, và tôi không thể sử dụng một lớp khác thay vì nó. Như tôi đã hiểu từ MSDN LINQ can be used if class implements IEnumerable<T>
. Tôi đã thử sử dụng instance.ToQueryable()
, nhưng nó vẫn không cho phép phương pháp LINQ. Tôi biết chắc chắn rằng lớp này có thể chứa các cá thể chỉ có một kiểu, vì vậy lớp có thể thực hiện IEnumerable<T>
, nhưng nó không có. Vậy tôi có thể làm gì để truy vấn lớp này bằng cách sử dụng các biểu thức LINQ?LINQ có hoạt động với IEnumerable không?
Trả lời
Bạn có thể sử dụng Cast<T>()
hoặc OfType<T>
để nhận phiên bản chung của IEnumerable hỗ trợ đầy đủ LINQ.
Ví dụ:
IEnumerable objects = ...;
IEnumerable<string> strings = objects.Cast<string>();
Hoặc nếu bạn không biết những gì loại nó chứa bạn luôn có thể làm:
IEnumerable<object> e = objects.Cast<object>();
Nếu bạn không chung IEnumerable
chứa các đối tượng của các loại khác nhau và bạn chỉ quan tâm đến ví dụ. các dây bạn có thể làm:
IEnumerable<string> strings = objects.OfType<string>();
Có thể. Bạn chỉ cần sử dụng chức năng Cast
để chuyển nó thành kiểu được nhập IEnumerable<T>
. Ví dụ
IEnumerable e = ...;
IEnumreable<object> e2 = e.Cast<object>();
Bây giờ e2
là một IEnumerable<T>
và có thể làm việc với tất cả các chức năng LINQ.
Bạn cũng có thể sử dụng cú pháp LINQ của hiểu truy vấn, trong đó phôi để loại biến phạm vi (item
trong ví dụ này) nếu một loại được quy định:
IEnumerable list = new ArrayList { "dog", "cat" };
IEnumerable<string> result =
from string item in list
select item;
foreach (string s in result)
{
// InvalidCastException at runtime if element is not a string
Console.WriteLine(s);
}
Hiệu ứng giống hệt với giải pháp của @ JaredPar; xem 7.16.2.2: Loại biến thể phạm vi rõ ràng trong đặc tả ngôn ngữ C# để biết chi tiết.
Có Nó,
tôi sẽ cung cấp cho bạn ví dụ ngắn để hiểu bạn tốt hơn
List<Student> obj = new List<Student>();
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
obj.Add(new Student() { name = "xyz", roll = 12, school = "pqr" });
IEnumerable<Student> students = from x in obj.AsEnumerable()
select x;
foreach (var item in students)
{
MessageBox.Show(item.name);
}
class Student
{
public string name { get; set; }
public int roll { get; set; }
public string school { get; set; }
}
'Danh sách
- 1. Đặc biệt không hoạt động với LINQ
- 2. Phương pháp Linn IEnumerable Linq có an toàn không?
- 3. LINQ - khoản orderby động không hoạt động
- 4. động LINQ OrderBy trên IEnumerable <T>
- 5. Sự khác biệt không hoạt động với LINQ đối tượng
- 6. LINQ có hoạt động trên Chỉ mục không?
- 7. LINQ không hoạt động trong MVC Xem
- 8. Nhibernate LINQ DateTime.AddDay không hoạt động
- 9. Loại trừ các loại biểu mẫu IEnumerable với linq
- 10. IEnumerable <IEnumerable <T>> để IEnumerable <T> sử dụng LINQ
- 11. LINQ to Entities ToString() - Không có giải pháp được đề xuất nào hoạt động?
- 12. LINQ: Cách khai báo IEnumerable [AnonymousType]?
- 13. Serializing kết quả của một LINQ IEnumerable
- 14. VS2012 có hoạt động với TFS2010 không?
- 15. Form_tag có hoạt động với Simple_form không?
- 16. @EntityListener có hoạt động với @MappedSuperclass không?
- 17. Inverse_of có hoạt động với has_many không?
- 18. LINQ: Chọn từ IEnumerable với Distinct/GroupBy và phân loại - có thể?
- 19. Tại sao biểu thức LINQ này không hoạt động?
- 20. LINQ - nó hoạt động như thế nào?
- 21. LINQ khi sử dụng GroupBy, Bao gồm không hoạt động
- 22. Tại sao LINQ không hoàn toàn hoạt động?
- 23. Đặt hàng LINQ Bằng cách không hoạt động
- 24. LINQ Ngoại trừ() Phương thức không hoạt động
- 25. LINQ Last() hoạt động như thế nào?
- 26. Kiểm tra xem danh sách có trống không với LINQ
- 27. Phân loại động với LINQ
- 28. C# động và làm việc với bộ sưu tập IEnumerable
- 29. biệt() không hoạt động
- 30. Tại sao không Cast <double>() hoạt động trên IEnumerable <int>?
Without đúc các IEnumerable, thay vì tất cả các phương pháp LINQ bạn sẽ chỉ thấy 8 phương pháp: AsQueryable , Cast <>, Equals, GetEnumerator, GetHashCode, GetType, OfType <>, ToString – ShawnFeatherly