我正在尝试构建一个接收Linq表的方法,并且应该返回一个List<>将成为DropDownList数据源的值。
这就是我现在所拥有的:
public static List<Structs.NameValuePair> GenDropDownItens<T>(string ValueField , string TextField ) where T: class
我不知道该怎么做,查询表只获取传递的字段(ValueField,TextField)......
韩国社交协会!
答案 0 :(得分:3)
将LINQ2SQL查询的结果投影到System.Collections.Generic.KeyValuePair对象中,如下所示:
ddl.DataSource = DataContext.Table.Select(o => new KeyValuePair<string, string>(o.ID, o.DisplayField));
ddl.DataBind();
然后,您需要将DropDownList上的DataValueField和DataTextField属性分别设置为“Key”和“Value”。
答案 1 :(得分: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对象,并从那里转换它。
答案 2 :(得分:0)
表。选择(t =&gt; t.field1,t.field2)
另请参阅Scott Gutherie的博客系列here。
答案 3 :(得分:0)
您是否尝试使用您的方法执行以下操作
GetDropDownItems(“Gates”,“LastName”)????
如果是这样,作为SDK示例的一部分包含一个名为DynamicQuery的项目。使用此功能,您基本上可以创建所需查询的文本版本。你可以做点什么
“姓氏=='盖茨'”
但是,自己构建表达式树也同样容易。了解表达式树的外观的最佳方法是使用ExpressionTreeVisualizer VS调试器添加(请注意,这也是SDK CSharpSamples中包含的另一个示例)。这就像是
ParameterExpression参数= Expression.Parameter(typeof(T),“x”); var expression = Expression.Equals(Expression.Property(parameter,“LastName”),Expression.Constant(“Gates”)
答案 4 :(得分: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;
}