如何从linq查询中返回{ModuleName = Admin}?

时间:2010-07-30 19:24:29

标签: c# linq-to-sql

我试图从linq查询中获取字符串值“Admin”,但是当我这样做时:

string oldModule = dc.Modules
                             .Where(x => x.Id == um.ModuleId)
                             .Select(s => new {s.ModuleName})
                             .FirstOrDefault().ToString();

它在oldModule变量中返回{ModuleName = Admin},而不仅仅是Admin。

5 个答案:

答案 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。