在String对象上选择ToString()不会返回实际的String

时间:2018-08-12 21:20:02

标签: c# model-view-controller lambda

我正在使用MVC,我的模型之一是FormElementTypes,它有一个int IDstring Name。当我尝试使用Lambda选择Name属性时,它不会返回该属性的实际字符串。

示例

foreach (FormElements e in Model.FormElements)
{
    string field = Model.FormElementTypes.Where(f => f.ID == e.FormElementTypesID).Select(f => f.Name).ToString();
}

我应该选择的Name属性的值应为text。但是,当我写出来时,它会吐出:System.Linq.Enumerable+WhereSelectListIterator`2[Scholar.Models.FormElementTypes,System.String]

我在做什么错了,如何获得Name属性字符串?

3 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为您在一个Enumerable对象上调用ToString() 这是一个集合对象。 您将需要遍历集合。 您可以阅读有关Linq in here

中的where函数的更多信息
dispatch_queue

答案 1 :(得分:0)

出现此问题是正常的,因为您尝试将IEnumerable转换为String,这是不可能的。

最诚挚的问候。

请尝试以下代码:

foreach (FormElements e in Model.FormElements)
{
    string field = Model.FormElementTypes.Where(f => f.ID == e.FormElementTypesID).Select(f => f.Name).FirstOrDefault<string>();
}

答案 2 :(得分:-1)

您打算调用ToList()而不是ToString()来执行查询

 var model = Model.FormElementTypes.Where(f => f.ID == e.FormElementTypesID).Select(f => f.Name).ToList();

就像得到实体一样

 var modelName = Model.FormElementTypes.Where(f => f.ID == e.FormElementTypesID)
                                       .Select(f => f.Name)
                                       .FirstOrDefault();