10

这个问题可能已经被回答了数百次,但这里有。

我有这段代码:

private void PopulateStringDropdownList(List<ObjectInfo> listObject,
                                        object selectedType = null)
{
    List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();
    for (int i = 0; i < listString .Count; i++)
    {
        for (int j = i + 1; j < listString .Count; j++)
        { 
            if (String.Equals(listString [i], listString [j]))
            {
                listString.RemoveAt(j);
            }
        }
    }
    ViewBag.property1 = new SelectList(listString );
}

所以基本上我试图用来自我传入参数的列表中包含的每个对象的属性的字符串填充下拉列表。

但是由于您在那里看到的错误,代码无法编译,我还没有完全理解为什么。有什么帮助吗?

4

6 回答 6

15

这是有问题的行:

List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();

ToString返回一个字符串,并且您正在尝试分配给一个List<string>变量。

你需要做这样的事情:

List<string> listString = listObject.OrderBy(x => x.m_Type)
                                    .Select(x => x.ToString())
                                    .ToList();

此语句会将您的listObjectenumerable 排序为您想要的顺序,然后将值转换为字符串,最后将 enumerable 转换为 a List<string>

于 2013-02-01T21:01:59.780 回答
5

看看这段代码:

List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();

右边的表达式调用-ToString()的结果,OrderBy它本身没有用,并且会产生一个string.

然后,您尝试将该string表达式分配给 type 的新变量List<string>。那是行不通的。

怀疑你只是想要ToList而不是ToString

List<string> listString = listObject.OrderBy(x => x.m_Type).ToList();
于 2013-02-01T21:02:02.727 回答
2

您可以将所有代码简化为:

List<string> listString = listObject.OrderBy(x => x.m_Type)
                                    .Select(x => x.ToString())
                                    .Distinct()  // Remove duplicated entries
                                    .ToList();
ViewBag.property1 = new SelectList(listString);
于 2013-02-01T21:12:39.030 回答
2

仍然需要进行一些更正。这是完整的代码:

private void PopulateStringDropdownList(List<ObjectInfo> listObjects, object selectedType = null)

        {
            List<string> listString = listObjects.OrderBy(x => x.m_Type)
                                             .Select(x => x.m_Type.ToString())
                                             //.Distinct()
                                             .ToList();
            ViewBag.cardType = new SelectList(listString );
        }

这样找到的正确值是类型的字符串,而不是对象的类型。

感谢大家的帮助!

于 2013-02-01T21:22:06.443 回答
2

我想你想要ToList而不是ToString.

此外,如果您想要做的只是删除重复项,您可以简单地使用 LINQ 并执行以下操作:

List<string> listString = listObject.OrderBy(x => x.m_Type).
    Select(x => x.ToString()).Distinct().ToList();
于 2013-02-01T21:02:01.790 回答
2

将列表转换int为列表string

List<string> listString =  listObject.OrderBy(x => x.m_Type).
Select(x =>x.ToString()).ToList();
于 2017-05-10T06:32:40.573 回答