我有一个包含5个项目的字符串数组。如何通过linq查询获得这5个项目之一?
下面的代码仅返回布尔值true。
string[] allWebTemplateSettings =SiteLidmaatschapSettings.Current.ProvisioningSettings;
var webTemplate = allWebTemplateSettings
.Select(x => x.StartsWith(string.Format("Template:{0}", web.WebTemplate)))
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
好吧,你得到了一个IEnumerable布尔值Select,然后你选择第一个(如果有的话)。这就是为什么你得到 abool作为你的答案。
我认为你真正想要的是:
string[] allWebTemplateSettings = SiteLidmaatschapSettings.Current.ProvisioningSettings;
var prefix = string.Format("Template:{0}", web.WebTemplate);
var webTemplate = allWebTemplateSettings
.FirstOrDefault(x => x.StartsWith(prefix));
Run Code Online (Sandbox Code Playgroud)
我已经将字符串格式化操作移出了谓词,因为为集合中的每个元素重新计算它是一种浪费(特别是如果集合很长)。
使用Where代替Select:
var webTemplate = allWebTemplateSettings.Where(x => x.StartsWith(string.Format("Template:{0}", web.WebTemplate))).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
那是因为StartsWith返回 abool并且您所说的Select基于bool它是否以该值开头。所以实际上,您甚至根本没有过滤该值,因为您没有使用过滤表达式。
实际上,您只需要FirstOrDefault因为列表已经是List<string>
string[] allWebTemplateSettings = SiteLidmaatschapSettings.Current.ProvisioningSettings;
var webTemplate = allWebTemplateSettings
.FirstOrDefault(x => x.StartsWith(string.Format("Template:{0}", web.WebTemplate)));
Run Code Online (Sandbox Code Playgroud)