Имя таблицы в Linq

Мой запрос Sql в Vb.net выглядит так:

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

Я получил TableName из другой формы. Как мы можем сделать это в linq? можем ли мы динамически использовать TableName в запросе Linq?

пожалуйста, помогите мне?


person Community    schedule 24.01.2009    source источник
comment
Linq-To-Sql, EF или Linq-to-objects?   -  person AnthonyWJones    schedule 24.01.2009


Ответы (2)


Извините за мой пример на 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, поэтому получаю объект из контекста данных. Если вы используете что-то другое, вам нужно настроить метод поиска объекта.

Вы также можете использовать стек операторов if-then на основе значения имени таблицы. Если бы количество возможных таблиц было фиксированным и небольшим, это могло бы быть лучше.

person tvanfosson    schedule 24.01.2009
comment
как я могу получить список столбцов из этой таблицы IQueryable в foreach спасибо: s - person Cem; 17.12.2009
comment
Используйте отражение для поиска свойств типа объекта IQueryable, которые имеют атрибут ColumnAttribute, затем вы можете получить имя свойства из каждого из этих свойств и создать список. Атрибут столбца также будет содержать информацию о фактическом столбце базы данных, которому он соответствует. - person tvanfosson; 17.12.2009

Я понял идею, спасибо, очень полезно, однако я не смог увидеть эти свойства.

    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 />";

    }

и вот результат;

характеристики:

Контекст только для чтения

Редактировать: Я нашел это!

PropertyInfo[] properties = 
        table.Where("WebRef = \"" + webref + "\"").ElementType.GetProperties(); 
person Cem    schedule 18.12.2009