Как мне выполнить динамический запрос Linq2SQL? - PullRequest
2 голосов
/ 14 ноября 2008

Я пытаюсь создать метод, который получит таблицу Linq и должен вернуть список <> значений, который будет источником данных DropDownList.

Вот что у меня есть до сих пор:

public static List<Structs.NameValuePair> GenDropDownItens<T>(string ValueField , string TextField ) where T: class

Чего я не знаю, так это сделать, запросить таблицу, получая только поля, которые были переданы (ValueField, TextField) ...

Tks!

Ответы [ 5 ]

3 голосов
/ 14 ноября 2008

Проецируйте результат вашего запроса LINQ2SQL в объект System.Collections.Generic.KeyValuePair следующим образом:


ddl.DataSource = DataContext.Table.Select(o => new KeyValuePair<string, string>(o.ID, o.DisplayField));
ddl.DataBind();

Затем вы захотите установить для атрибутов DataValueField и DataTextField в DropDownList значения «Key» и «Value» соответственно.

1 голос
/ 14 ноября 2008

Почему бы просто не сделать что-то вроде;

var dropDownValues = dataContext.SomeTable.ToDictionary(
    s => s.Name,
    s => s.Value
);

foreach(var item in dropDownValues) {
    var OptionName = item.Key;
    var OptionValue = item.Value
};

Надеюсь, это поможет, я действительно не думаю, что вам нужно создавать метод while. Но если бы вы хотели, я бы сказал, чтобы он взял объект IDictionary и преобразовал его оттуда.

0 голосов
/ 14 ноября 2008

Если «Ключ» и «Значение» - это строки, представляющие имена свойств, которые вы хотите получить, и они известны только во время выполнения ... вот ваш код:

private static Func<T, DictionaryEntry> GetNameValuePairFunc<T>(string valueField, string textField)
{
    Func<T, DictionaryEntry> result = (item) =>
    {
        object key = typeof(T).GetProperty(valueField).GetValue(item, null);

        object text = typeof(T).GetProperty(textField).GetValue(item, null);

        return new DictionaryEntry(key, text);
    };

    return result;
}
0 голосов
/ 14 ноября 2008

Вы пытаетесь сделать что-то вроде следующего с вашим методом

GetDropDownItems ("Ворота", "Фамилия") ????

Если это так, в состав примеров SDK включен проект DynamicQuery. Используя это, вы можете создать текстовую версию запроса. Вы могли бы сделать что-то вроде

"Фамилия == 'Ворота'"

Однако создать дерево выражений так же просто, как и вы. Лучший способ узнать, как выглядит дерево выражений, - это использовать надстройку отладчика ExpressionTreeVisualizer VS. Это было бы что-то вроде

Параметр ParameterExpression = Expression.Parameter (typeof (T), "x"); var expression = Expression.Equals (Expression.Property (параметр, "LastName"), Expression.Constant ("Gates")

0 голосов
/ 14 ноября 2008

Таблица. Выбор (t => t.field1, t.field2)

Также ознакомьтесь с серией блогов Скотта Гатери здесь .

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