2013-01-07 22 views
9

Dinamik olarak sorguyu gerçekleştirmek için tabloyu dinamik olarak seçerek, LINQ ile bir sorgu oluşturmak mümkün olup olmadığını anlamanız gerekir.Dinamik sorgu LINQ to SQL kullanarak

//Not working,just for example 

public List<dynamic> _getGenericList(String tableName) 
    { 
     var l = from a in db.//I need to use here tableName 
        select a; 

     return l.ToList<dynamic>(); 
    } 

bunu mümkün kılmak için bir yol var mı:

Bu ne yapardım bir örnektir?

+0

dayanarak http: //weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx http://social.msdn.microsoft.com/Forums/eu/linqprojectgeneral/konu/d9ffe9a1-59c3-4776-900a-4b45e0b4abcf http://stackoverflow.com/questi ons/7800770/how-can-you-dinamik olarak-bir-tablo-ile-varlık-çerçeve-4-x http://www.west-wind.com/weblog/posts/2007/Aug/13/LINQ -to-SQL-ve-Dinamik-Sorgular-ve-İfadeler –

+0

Bu bağlantıları aramak için çalışacağız. Faydalı bir şey bulursam size haber vereceğim. – benVG

+0

iyi şanslar, senin için çok kolay olacak sanırım! –

cevap

3

Sorgu bu kadar basitse, dinamik bir standart sql deyimi oluşturabilir ve çalıştırabilirsiniz, bu işlem yoğun yansıma ve karmaşık kod kullanmadan en basit yoldur?

var query = "SELECT * FROM " + tableName; 
var res = context.ExecuteQuery<dynamic>(query).ToList(); 
+1

Bu size anonim bir tip verecek, ancak dinamik bir sonuç vermeyecek! –

+0

@MohamedSakherSawan - Doğru teşekkürler Düzenlediklerim – CR41G14

+1

Yapamam, projede sadece LINQ'yi SQL'e kullanabiliyoruz, müşterinin gereksinimlerinden biri (zaten var olan bir uygulama için eklentidir). – benVG

1

Bunu yapmanın bir yolunu buldum, ancak bu kodu kullanıp kullanmadığımı bilmiyorum. ileterek

class DataHelper 
{ 
    public MyDatabaseDataContext db = new MyDatabaseDataContext(); 

    List<dynamic> GetDynamicList<T>() where T : class 
    { 
     System.Data.Linq.Table<T> table = db.GetTable<T>(); 

     var result = from a in table select a; 

     return result.ToList<dynamic>(); 
    } 

    public List<dynamic> GetWhatIWant(string tableName) 
    { 
     Type myClass = Type.GetType("DynamicLinqToSql." + tableName); 
     MethodInfo method = typeof(DataHelper).GetMethod("GetDynamicList", BindingFlags.NonPublic | BindingFlags.Instance); 
     method = method.MakeGenericMethod(myClass); 
     return (List<dynamic>)method.Invoke(this, null); 
    } 
} 

Sonra GetWhatIWant yöntemini sizin DataHelper bir örneğini oluşturabilir ve arayabilirsiniz:

PrimaryTable 
    ID, 
    FirstValue, 
    SecondValue 

SecondaryTable 
    ID, 
    FirstSecondaryValue 

Aşağıdaki DataHelper sınıfını kullanabilirsiniz: Eğer iki tablo içeren bir DataContext'i varsa Tablo ismi. dönmek Eğer Jenerik Yöntem ve db.Set<T> kullanabilirsiniz LINQ to SQL

var dataHelper = new DataHelper(); 

List<dynamic> myFirstList = dataHelper.GetWhatIWant("PrimaryTable"); 

for (int i = 0; i < 5 && i < myFirstList.Count; i++) 
{ 
    System.Console.WriteLine(String.Format("{0} - {1}", myFirstList[i].FirstValue.ToString(), myFirstList[i].SecondValue.ToString())); 
} 

List<dynamic> mySecondList = dataHelper.GetWhatIWant("SecondaryTable"); 

for (int i = 0; i < 5 && i < mySecondList.Count; i++) 
{ 
    System.Console.WriteLine(mySecondList[i].FirstSecondaryValue.ToString()); 
} 

System.Console.ReadKey(); 
+0

Bu çözüm üzerinde çalışın .. Eğer benim için çalışıyorsa size bildiririm .. – benVG

-2
 

var esql = "select t from TypeName as t" 
var q = db.CreateQuery(esql); 

Kullanım varlık sql, http://esql.codeplex.com

-1

bir DbSet Bu makale ve cevapları refere edebilir T