我试图从linq查询中获取字符串值“Admin”,但是当我这样做时:
string oldModule = dc.Modules
.Where(x => x.Id == um.ModuleId)
.Select(s => new {s.ModuleName})
.FirstOrDefault().ToString();
它在oldModule变量中返回{ModuleName = Admin},而不仅仅是Admin。
答案 0 :(得分:9)
那是因为你在投影中引入了一个匿名类型。试试这个:
string oldModule = dc.Modules
.Where(x => x.Id == um.ModuleId)
.Select(s => s.ModuleName)
.FirstOrDefault();
我也删除了ToString
调用,如果NullReferenceException
子句没有匹配任何内容,则会调出Where
。
答案 1 :(得分:2)
string oldModule = dc.Modules
.Where(x => x.Id == um.ModuleId)
.Select(s => s.ModuleName)
.FirstOrDefault().ToString();
答案 2 :(得分:2)
如何选择ModuleName
属性?
(from m in dc.Modules
where m.Id == um.ModuleId
select m.ModuleName).FirstOrDefault()
答案 3 :(得分:1)
这是因为new {...}在Select中创建了一个新的匿名类型。当您调用ToString()时,您在此anonoymous类型上调用它,而不是ModuleName字符串。如果你只是写.Select(s => s.ModuleName)你会得到一个字符串而不是匿名类型,而oldModule将包含Admin。
实际上,在查询结束时甚至不需要ToString(),因为FirstOrDefault()的结果已经是一个字符串。
答案 4 :(得分:0)
中的新功能是什么
.Select(s => new {s.ModuleName})
我不知道你的问题是什么,但我不会感到惊讶,如果这是它的一部分..
我也可能只是做。单(s => s.ModuleName)而不是.select和.firstordefault。