使用LINQ to SQL进行动态查询

我需要弄清楚是否可以使用LINQ动态构建查询,动态选择要在其中执行查询的表。

这是我要做的一个例子:

//Not working,just for example public List _getGenericList(String tableName) { var l = from a in db.//I need to use here tableName select a; return l.ToList(); } 

有没有办法让这成为可能?

如果查询很简单,你可以动态创建一个标准的sql语句并执行它,这是最简单的方法,而不使用处理器大量reflection和复杂的代码?

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

我找到了一种方法,但我不确定我是否会使用此代码。 如果您有一个包含两个表的DataContext:

 PrimaryTable ID, FirstValue, SecondValue SecondaryTable ID, FirstSecondaryValue 

您可以使用以下DataHelper类:

 class DataHelper { public MyDatabaseDataContext db = new MyDatabaseDataContext(); List GetDynamicList() where T : class { System.Data.Linq.Table table = db.GetTable(); var result = from a in table select a; return result.ToList(); } public List 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)method.Invoke(this, null); } } 

然后,您可以创建DataHelper的实例并调用GetWhatIWant方法,并传入表名。

 var dataHelper = new DataHelper(); List 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 mySecondList = dataHelper.GetWhatIWant("SecondaryTable"); for (int i = 0; i < 5 && i < mySecondList.Count; i++) { System.Console.WriteLine(mySecondList[i].FirstSecondaryValue.ToString()); } System.Console.ReadKey(); 

你可以使用Generic Method并使用db.Set返回基于TDbSet


 var esql =“从TypeName中选择t作为t”
 var q = db.CreateQuery(esql);

使用实体sql for linq to sql, http://esql.codeplex.com