将foreach更改为只执行一次调用
本文关键字:一次 调用 执行 foreach | 更新日期: 2023-09-27 18:03:02
我有一个列表,我在其中调用每个item,我想做的是只使用一个调用而不是每个item:这是我的逻辑
List<Embarcaciones> embarcaciones = new List<Embarcaciones>();
foreach (ListItem item in itemsEmbarcaciones)
{
embarcaciones.Add(new Embarcaciones
{
Categoria = idioma == "Espanol" ?
item["Categoria"] == null ? string.Empty :
((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria"])).LookupValue
: item["Categoria_x003a_English"] == null ? string.Empty :
((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria_x003a_English"])).LookupValue,
Title = item["Title"] == null ? string.Empty : item["Title"].ToString(),
Imagen = item["Imagen"] == null ? string.Empty : (item["Imagen"] as FieldUrlValue).Url,
Enlace = item["Enlace"] == null ? string.Empty : item["Enlace"].ToString(),
Especificaciones = item["Especificaciones"] == null ? string.Empty : item["Especificaciones"].ToString(),
Specifications = item["Specifications"] == null ? string.Empty : item["Specifications"].ToString()
});
}
result.Embarcaciones = categoria.Contains("'"") ?
embarcaciones.Where(x => x.Categoria.ToLower().Contains(categoria.ToLower())).ToList() :
embarcaciones.Where(x => x.Categoria.ToLower().Equals(categoria.ToLower())).ToList();
我怎样才能改变我的方法,只调用一次而不是"foreach"方法?关于
您要使用LINQ
List<Embarcaciones> embarcaciones = itemsEmbarcaciones.Select(x => new Embarcaciones() {
Categoria = (idioma == "Espanol" ? (x["Categoria"] == null ? ... : ...) : ...),
Title = ...
...
}).ToList();
但是你真的不应该使用这么多嵌套的三元if(真的吗?"真的":(假的?"真":"假"))。它很快就会变得非常丑陋。但如果需要,至少要使用括号。
将foreach(...) embarcaciones.Add(...)
替换为Select(...).ToList()
:
var embarcaciones = itemsEmbarcaciones.Select(item => new Embarcaciones
{
Categoria = idioma == "Espanol" ?
item["Categoria"] == null ? string.Empty :
((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria"])).LookupValue
: item["Categoria_x003a_English"] == null ? string.Empty :
((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria_x003a_English"])).LookupValue,
Title = item["Title"] == null ? string.Empty : item["Title"].ToString(),
Imagen = item["Imagen"] == null ? string.Empty : (item["Imagen"] as FieldUrlValue).Url,
Enlace = item["Enlace"] == null ? string.Empty : item["Enlace"].ToString(),
Especificaciones = item["Especificaciones"] == null ? string.Empty : item["Especificaciones"].ToString(),
Specifications = item["Specifications"] == null ? string.Empty : item["Specifications"].ToString()
}).ToList();
如果你使用的是c# 6,你也可以使用null coalescing
操作符来清理,这是Visual Studio 2015中的标准:
using Microsoft.SharePoint.Client;
//...
var embarcaciones = itemsEmbarcaciones.Select(item => new Embarcaciones
{
Categoria = idioma == "Espanol"
? (item["Categoria"] as FieldLookupValue)?.LookupValue ?? string.Empty
: (item["Categoria_x003a_English"] as FieldLookupValue)?.LookupValue ?? string.Empty,
Title = item["Title"] as string ?? string.Empty,
Imagen = (item["Imagen"] as FieldUrlValue)?.Url ?? string.Empty,
Enlace = item["Enlace"] as string ?? string.Empty,
Especificaciones = item["Especificaciones"] as string ?? string.Empty,
Specifications = item["Specifications"] as string ?? string.Empty
}).ToList();