我在Vb.net中的Sql查询是这样的:
Dim TableName As String ="City"
Dim Str As String="Select * from "+TableName+""
我从另一个Form获得TableName。我们可以在linq中执行此操作吗? 我们可以动态地在Linq查询中使用TableName吗?
请帮帮我?
答案 0 :(得分:1)
很抱歉我的例子是在C#,但我的Vb生锈了。我可以阅读它,但不能把它写得很好。
我能想到的最好的方法是使用反射和扩展方法而不是LINQ语法。
PropertyInfo info = dataContext.GetType().GetProperty( "City" );
IQueryable table = info.GetValue( dataContext, null ) as IQueryable;
var query = table.Where( t => t.Column == "Value" )
.Select( t => t.OtherColumn );
我在这个例子中假设LINQtoSQL,所以从datacontext获取对象。如果您正在使用其他内容,则需要调整查找对象的方法。
您还可以根据表名的值使用一堆if-then语句。如果可能的表格数量固定且很小,这可能会更好。
答案 1 :(得分:0)
我明白了,谢谢,非常有帮助,但是我无法看到这些属性。
string linqObjectName = "Test";
PropertyInfo info = db.GetType().GetProperty(linqObjectName);
IQueryable table = info.GetValue(db, null) as IQueryable;
PropertyInfo[] properties = table.GetType().GetProperties();
ltr.Text += "properties: <hr size=1/>";
foreach (PropertyInfo p in properties)
{
ltr.Text += p.Name + "<br />";
}
那就是结果;
上下文 IsReadOnly
编辑:我找到了它!
PropertyInfo[] properties =
table.Where("WebRef = \"" + webref + "\"").ElementType.GetProperties();