Linq中的TableName

时间:2009-01-24 13:00:19

标签: vb.net linq

我在Vb.net中的Sql查询是这样的:

Dim TableName As String ="City"
Dim Str As String="Select * from "+TableName+""

我从另一个Form获得TableName。我们可以在linq中执行此操作吗? 我们可以动态地在Linq查询中使用TableName吗?

请帮帮我?

2 个答案:

答案 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();