2008-11-14 3 views
2

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

Это то, что у меня до сих пор:

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

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

Tks!

+0

Я настоятельно рекомендую вам изменить заголовок вопроса на что-то более значимое, то "Linq2SQL Помощь." – 2008-11-14 13:37:00

ответ

0

Table.Select (т => t.field1, t.field2)

проверить Также из блога Скотта Gutherie в серии here.

+0

Table.Select (т => новый Structs.NameValuePair (t.field1, t.field2)). ToList() - Еще лучше. – 2008-11-14 14:17:35

+0

Дэн, ты прочитал мой ответ? ;) – CodeChef 2008-11-14 14:23:14

+0

К сожалению, нет ... Теперь, хотя ... это хороший ... +1! – 2008-11-14 14:28:51

1

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

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

Я думаю, что он должен иметь возможность указывать имена полей «Key, Value» в качестве строк во время выполнения. – 2008-11-14 14:00:58

0

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

GetDropDownItems ("Ворота", "LastName") ????

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

«LastName ==" Gates»

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

ПараметрExpression = Expression.Parameter (typeof (T), "x"); выражение вар = Expression.Equals (Expression.Property (параметр, "LastName"), Expression.Constant ("Ворота")

3

проекта результат вашего запроса 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» соответственно

0

Если «Key» и «Value» являются строками, которые представляют имя. свойств, которые вы хотели бы получить, и они известны только во время выполнения ... вот ваш код:

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; 
} 
Смежные вопросы