大家好我有一个可怕的数据库我必须使用和linq到sql是我从中检索数据的选项。我试图通过基于用户选择引入不同的表名来重用函数,并且我无法修改TEntity或表<>在DataContext查询中。
这是我目前的代码。
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。
答案 0 :(得分:3)
您可以在DataContext实例上调用ExecuteQuery方法。您将需要调用带有Type实例的重载,如下所示:
http://msdn.microsoft.com/en-us/library/bb534292.aspx
假设您有一个正确归因于该表的类型,为该类型传递该Type实例,SQL将为您提供所需的内容。
答案 1 :(得分:0)
正如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);