Выберите столбец на основе переменной в LINQ to SQL - PullRequest
4 голосов
/ 17 ноября 2010

Я использую LINQ to SQL в C # в моем приложении. Мне нужно иметь возможность выбрать столбец строки, в зависимости от переменной. Это легко для строки, так как это простое предложение where, но я не могу выбрать только конкретный столбец Вот мой код:

var permissions = (from s in dc.Permissions where s.dashboardname == permission select s.[variablehere]).Single();

Легко ли это сделать?

Ответы [ 5 ]

1 голос
/ 17 ноября 2010

Я не уверен, что полностью понимаю ваш вопрос, так что это может быть немного не так. Но может ли ваша проблема быть решена с помощью библиотеки динамических запросов LINQ ?

Вы можете использовать библиотеку DynamicQuery против любого поставщика данных LINQ (включая LINQ to SQL, LINQ to Объекты, LINQ to XML, LINQ to Сущности, LINQ to SharePoint, LINQ to TerraServer и т. Д.). Вместо того, чтобы использовать операторы языка или лямбда с безопасным типом методы расширения, чтобы построить свой LINQ запросы, динамический запрос библиотека предоставляет вам строки на основе методы расширения, которые вы можете передать любое строковое выражение в.

См. Ссылку выше для образцов и загрузок.

1 голос
/ 17 ноября 2010

Можно ли изменить структуру базы данных, чтобы столбцы стали строками?(Поверните свою таблицу?)

Например.

Permissions Table
-----------------
Id
Dashboardname
Page1
Page2
Page3
...

и превратить ее в

Permissions Table
-----------------
Id
Dashboardname
Pagename

Тогда вы можете использовать предложение where, чтобы выбрать нужную строку?

0 голосов
/ 17 ноября 2010

Еще один ответ, который мне пришёл в голову, - создать таблицу с парами ключ-значение, т. Е.

  • панель инструментов
  • ключ
  • значение

, где первичный ключ - (dashboard, key).

0 голосов
/ 17 ноября 2010

Скажем, класс с правами доступа называется Permission, вы можете определить метод расширения:

public static class PermissionExtensions
{
    public static object SelectProperty(this Permission obj, string variable)
    {
        return obj.GetType().GetProperty(variable).GetValue(obj, null);
    }
}

Вы можете использовать это в своем запросе так:

(from s in dc.Permissions where s.dashboardname == permission select s)
    .Single().SelectProperty(variable);

Это не выбирает свойство в запросе, а получает его из экземпляра.

0 голосов
/ 17 ноября 2010

Я не думаю, что это возможно или является хорошей практикой. Обратите внимание, что если имя переменной предоставлено пользователем, он или она может легко взять все данные, которые они хотят. Может быть, вам стоит попробовать использовать перечисление и условие switch ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...