我需要从Linq DataContext的表名中获取表数据。从LINQ DataContext中的表名获取表数据
取而代之的是
var results = db.Authors;
我需要做这样的事情。
string tableName = "Authors";
var results = db[tableName];
它可以是任何在DataContext中可用的表名。
我需要从Linq DataContext的表名中获取表数据。从LINQ DataContext中的表名获取表数据
取而代之的是
var results = db.Authors;
我需要做这样的事情。
string tableName = "Authors";
var results = db[tableName];
它可以是任何在DataContext中可用的表名。
鉴于DataContext context
和string tableName
,你可以说:
var table = (ITable)context.GetType()
.GetProperty(tableName)
.GetValue(context, null);
我不确定传递字符串是否是一个优雅的解决方案。我宁愿将实体类型作为参数发送给方法。这些行上的东西:
var table = _dataCont.GetTable(typeof(Customer));
Here是MSDN文档。
我需要使用我的字符串变量来获取表数据。 – Krunal 2009-12-17 08:11:51
由于设计Linq2SQl不支持。您需要创建一个类似于GetTableTypeFromString(string tableName)的方法;有一个switch语句并返回所需的表类型 – Perpetualcoder 2009-12-17 16:08:14
我不知道我会建议它作为一个很好的解决方案,但如果你真的需要它,你可以做这样的事情:
MyDBContext db = new MyDBContext();
Type t = db.GetType();
PropertyInfo p = t.GetProperty("Authors");
var table = p.GetValue(db, null);
这会给你Authors表,公关。表。
这将键入'table'作为'object';你需要在使用前投射到“ITable”。 – jason 2009-12-18 03:39:04
您能否提供如何使用ITable将数据获取为IEnumerable或IQueryable? – Krunal 2009-12-18 06:52:27
它已经是一个IEnumerable/IQueryable。区别在于它不是泛型版本IEnumerable
MyDataContext db = new MyDataContext();
Assembly assembly = Assembly.GetExecutingAssembly();
Type t = assembly.GetType("Namespace." + strTableName);
if (t != null)
{
var foos = db.GetTable(t);
foreach (var f in foos)
{
PropertyInfo pi = f.GetType().GetProperty("Foo");
int value = (int)pi.GetValue(f, null);
Console.WriteLine(value);
}
}
好吧,ITable tbl = db.GetTableByName(“Authors”);如何访问tbl以获取IEnumerable记录? – Krunal 2009-12-18 06:56:48
一个'ITable'也是一个'IEnumerable',所以用你最喜欢的方法枚举记录(例如,'foreach(object in rbl){}')。 – jason 2009-12-18 12:46:45
但它不是强类型。我怎样才能动态地强制类型化数据? – Krunal 2009-12-21 05:02:40