[英]Dynamic Table Names in Linq to SQL
大家好我有一个可怕的数据库我必须使用和linq到SQL是我采取从中检索数据的选项。 我试图通过根据用户选择引入不同的表名来重用函数,并且我无法修改DataContext查询中的TEntity或Table <>。
这是我目前的代码。
public void GetRecordsByTableName(string table_name){
string sql = "Select * from " + table_name;
var records = dataContext.ExecuteQuery</*Suppossed Table Name*/>(sql);
ViewData["recordsByTableName"] = records.ToList();
}
我想用可枚举记录填充我的ViewData。
您可以在DataContext实例上调用ExecuteQuery方法。 您将需要调用带有Type实例的重载,如下所示:
http://msdn.microsoft.com/en-us/library/bb534292.aspx
假设您有一个为表正确归属的类型,为该类型传递该Type实例,SQL将为您提供所需的内容。
正如casperOne已经回答的那样,您可以使用ExecuteQuery
方法首先重载(要求Type参数的那个)。 既然我遇到了类似的问题,你问了一个例子,这里有一个:
public IEnumerable<YourType> RetrieveData(string tableName, string name)
{
string sql = string.Format("Select * FROM {0} where Name = '{1}'", tableName, name);
var result = YourDataContext.ExecuteQuery(typeof(YourType), sql);
return result;
}
请注意YourType
因为您必须定义具有构造函数的类型(它不能是抽象或接口)。 我建议您创建一个与SQL表具有完全相同属性的自定义类型。 如果这样做,ExecuteQuery方法将自动将表中的值“注入”到自定义类型。 像那样:
//This is a hypothetical table mapped from LINQ DBML
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ClientData")]
public partial class ClientData : INotifyPropertyChanging, INotifyPropertyChanged
{
private int _ID;
private string _NAME;
private string _AGE;
}
//This would be your custom type that emulates your ClientData table
public class ClientDataCustomType
{
private int _ID;
private string _NAME;
private string _AGE;
}
因此,在前一个示例中,ExecuteQuery方法将是:
var result = YourDataContext.ExecuteQuery(typeof(ClientDataCustomType), sql);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.