这个问题可能已经被回答了数百次,但是这里有了。
我有这个代码:
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 );
}
所以基本上我正在尝试使用来自参数中传递的列表中包含的每个对象的属性的字符串来填充下拉列表。
但代码无法编译,因为你在那里看到的错误,我还没有理解为什么。有人帮忙吗?
答案 0 :(得分:12)
这是有问题的一行:
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();
此语句会将您的listObject
枚举订购到您想要的订单,然后将值转换为字符串,最后将可枚举转换为List<string>
。
答案 1 :(得分:5)
看看这段代码:
List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();
右侧表达式在ToString()
的结果上调用OrderBy
- 这本身并不有用,并且会产生string
。
然后您尝试将string
表达式分配给List<string>
类型的新变量。那不行。
我怀疑你只想要ToList
而不是ToString
:
List<string> listString = listObject.OrderBy(x => x.m_Type).ToList();
答案 2 :(得分:2)
我认为你想要ToList
而不是ToString
。
此外,如果你要做的就是删除重复项,你可以简单地使用LINQ并执行此操作:
List<string> listString = listObject.OrderBy(x => x.m_Type).
Select(x => x.ToString()).Distinct().ToList();
答案 3 :(得分:2)
您可以将所有代码简化为:
List<string> listString = listObject.OrderBy(x => x.m_Type)
.Select(x => x.ToString())
.Distinct() // Remove duplicated entries
.ToList();
ViewBag.property1 = new SelectList(listString);
答案 4 :(得分: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 );
}
这样找到的正确值是Type的字符串,而不是对象的类型。
感谢大家的帮助!
答案 5 :(得分:1)
将int
的列表转换为string
列表:
List<string> listString = listObject.OrderBy(x => x.m_Type).
Select(x =>x.ToString()).ToList();