如何获取所选值的Id?

How to get the Id of the selectedvalue?

我有具有以下值的 DropDownList:

ddl.SelectedValue = { Id = 234, Name = "ABC Name" }

如何获取Id的值?

我使用 WinForms 和 RadDropDownList

试试这个:

public int GetId(object obj)
{
    var anon = new { Id = 0, Name = string.Empty };
    var obj2 = MakeSameType(obj, anon);
    return obj2.Id;
}

public static T MakeSameType<T>(object obj, T anonymous)
{
    return (T)obj;
}

像这样使用它:

int id = GetId(ddl.SelectedValue);

如果 有效,这要归功于 C# 编译器如何在单个类型中 "condensed" 等效匿名类型。

请注意,此解决方案非常脆弱

如果你 add/remove/rename 匿名类型的 属性 , GetId 将会中断(你必须保持 var anon = new {...} 完美 对齐)。如果将创建匿名类型集合的方法移动到另一个程序集,它也会中断(因为只有同一程序集中的匿名类型被编译器"unified")。

一般来说,您不应该 具有"escape" 方法的匿名类型。匿名类型应该保留在它定义的方法中。直接赋值为控件的DataSource是自找麻烦

如果您觉得懒惰并且不想为键值创建类型,请使用 Tuple

var tuple = Tuple.Create(something, somethingelse, somethingstillelse);
var value1 = tuple.Item1;
var value2 = tuple.Item2;
var value3 = tuple.Item3;

等等。

由于您使用的是匿名类型,所以它变得有点复杂。但是,您可以将 SelectedValue 转换为动态,并从那里提取 'Id':

dynamic selectedValue = ddl.SelectedValue;
int id = selectedValue.Id;

但我建议为这种情况声明您自己的 class 或结构。

我更改了 LINQ 查询

来自:

var query = (from q in tableq where ...
             select new {Id = q.Id, Name = q.Name});

至:

var query = (from q in tableq where ...
             select q);

...然后将其更改为:

table1.Id = (ddl.SelectedValue as tableq).Id == null ? table1.Id : (ddl.SelectedValue as tableq).Id;