繁体   English   中英

Linq to SQL中的动态表名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM