如何进行动态Linq2SQL查询?

时间:2008-11-14 13:33:04

标签: c# linq-to-sql

我正在尝试构建一个接收Linq表的方法,并且应该返回一个List<>将成为DropDownList数据源的值。

这就是我现在所拥有的:

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

我不知道该怎么做,查询表只获取传递的字段(ValueField,TextField)......

韩国社交协会!

5 个答案:

答案 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;
}