2009-04-09 55 views

Trả lời

28

Dễ dàng hơn nhiều so với ở trên và không cần phản ánh. LINQ to SQL có một thuộc tính Mapping mà bạn có thể sử dụng để có được một liệt kê tất cả các bảng.

context.Mapping.GetTables(); 
+0

Tốt, tôi không biết về điều đó. –

+0

whooo hoo thậm chí còn tốt hơn! – Sergey

+0

Vâng, tôi cứ tự mình tìm kiếm những thứ như thế. Nó luôn luôn thú vị để vượt qua một ngày :). –

4

Bạn có thể thực hiện việc này thông qua phản ánh. Về cơ bản, bạn lặp lại các thuộc tính trong lớp DataContext của mình. Đối với mỗi thuộc tính, hãy kiểm tra xem loại thông số chung của thuộc tính đó có thuộc tính TableAttribute hay không. Nếu vậy, thuộc tính đó đại diện cho một bảng:

using System.Reflection; 
using System.Data.Linq.Mappings; 

PropertyInfo[] properties = typeof(MyDataContext).GetProperties(); 
foreach (PropertyInfo property in properties) 
{ 
    if(property.PropertyType.IsGenericType) 
    { 
     object[] attribs = property.PropertyType.GetGenericArguments()[0].GetCustomAttributes(typeof(TableAttribute), false); 
     if(attribs.Length > 0) 
     { 
      Console.WriteLine(property.Name); 
     } 
    } 
} 
+0

Chết tiệt! Bạn gõ quá nhanh: P – SirDemon

+0

@SirDemon thực sự tôi hoàn toàn nhận được câu trả lời sai, xóa nó, kiểm tra câu trả lời đúng trong Visual Studio, undeleted và sửa đổi :) –

+0

haha ​​cảm ơn bạn rất nhiều, đó là nhanh chóng! – Sergey

3
dc= new myDataContext(); 
var listaTablas = (from tables in dc.Mapping.GetTables() select tables.TableName).ToList(); 
1
using System.Reflection; 
using System.Data.Linq.Mappings; 

PropertyInfo[] properties = typeof(MyDataContext).GetProperties(); 
foreach (PropertyInfo property in properties) 
{ 
    if(property.PropertyType.IsGenericType) 
    { 
     object[] attribs = property.PropertyType.GetGenericArguments()[0].GetCustomAttributes(typeof(TableAttribute), false); 
     if(attribs.Length > 0) 
     { 
      Console.WriteLine(property.Name); 
     } 
    } 
} 
Các vấn đề liên quan