2017-10-19 85 views
6

Tôi đang cố gán một thuộc tính static List<PropertyInfo> của tất cả các thuộc tính DbSet trong lớp Entities.LINQ .Where (loại = typeof (xxx)) so sánh luôn sai

Tuy nhiên khi mã chạy Danh sách trống vì .Where(x => x.PropertyType == typeof(DbSet))luôn trả về false.

Tôi đã thử nhiều biến thể trong phương pháp .Where(...) như typeof(DbSet<>), Equals(...), .UnderlyingSystemType, v.v. nhưng không có biến thể nào hoạt động.

Tại sao .Where(...) luôn trả về false trong trường hợp của tôi?

Mã của tôi:

public partial class Entities : DbContext 
{ 
    //constructor is omitted 

    public static List<PropertyInfo> info = typeof(Entities).getProperties().Where(x => x.PropertyType == typeof(DbSet)).ToList(); 

    public virtual DbSet<NotRelevant> NotRelevant { get; set; } 
    //further DbSet<XXXX> properties are omitted.... 
} 
+3

'DbSet'! =' DbSet '... Tôi muốn nói đó là vấn đề –

+0

@ClaudioRedi Vâng, đó là vấn đề. Có tài nguyên trực tuyến nơi tôi có thể đọc được sự khác biệt không? – Tom

Trả lời

7

Kể từ DbSet là một loại riêng biệt, bạn nên sử dụng một cách tiếp cận cụ thể hơn:

bool IsDbSet(Type t) { 
    if (!t.IsGenericType) { 
     return false; 
    } 
    return typeof(DbSet<>) == t.GetGenericTypeDefinition(); 
} 

Bây giờ khoản Where của bạn sẽ trông như thế này:

.Where(x => IsDbSet(x.PropertyType)) 
+0

Mã lỗi: 'Loại.GetGenericTypeDefinition' không nhận bất kỳ đối số nào. – pinkfloydx33

+0

@ pinkfloydx33 Bạn nói đúng, cảm ơn bạn rất nhiều! Bạn được hoan nghênh chỉnh sửa mã, đặc biệt khi bạn thấy các lỗi ngớ ngẩn như thế này. – dasblinkenlight

Các vấn đề liên quan