Linq Lambda Expression检查null或为空

时间:2017-08-24 15:27:40

标签: c# linq lambda

我是Linq和Lambda表达式的新手,我想改变这段代码:

    if (string.IsNullOrEmpty(model.PictureUrl1) && string.IsNullOrEmpty(model.Picture2Url) &&
        string.IsNullOrEmpty(model.Picture3Url) && string.IsNullOrEmpty(model.Picture4Url) &&
        string.IsNullOrEmpty(model.Picture5Url) && string.IsNullOrEmpty(model.Picture6Url))
        return Content("");

现在我重构了该模型,以获得具有这些属性的对象和所述对象的列表:

public class PublicInfoModelItem 
{
    public string PictureUrl { get; set; }
    public string Text { get; set; }
    public string Link { get; set; }
}

列表:

public List<PublicInfoModelItem> ListOfImages = new List<PublicInfoModelItem>();

型号:

public class PublicInfoModel 
{
    public List<PublicInfoModelItem> ListOfImages = new List<PublicInfoModelItem>();

    public string Container { get; set; }

    public int TemplateId { get; set; }

    public PublicInfoModelItem InfoModelItem { get; set; }

}

我在想一个Lambda表达式,比如:

    var result = model.ListOfImages.Where(x => string.IsNullOrEmpty(x.PictureUrl)).ToList();
    if (result == null)
    {
        return Content("");
    }

我不知道上面的表达是否正确或是否可以改进。

4 个答案:

答案 0 :(得分:3)

我想你想使用Any:

if (!model.ListOfImages.Any(x => string.IsNullOrEmpty(x.PictureUrl)))
{
    return Content("");
}

答案 1 :(得分:2)

只是为了追加布雷特的解决方案:

if (!model.ListOfImages.Any(x => string.IsNullOrEmpty(x.PictureUrl)))
{
    return Content("");
}

你可能正在寻找什么。但它几乎与:

相同
if(model.ListOfImages.All(x=> !string.IsNullOrEmpty(x.PictureUrl)))
{
return Content("");
}

这里唯一的区别是:Any将返回第一个被评估为true的项目,而All将返回第一个对谓词变为false的项目。但是,由于All的谓词被否定,它将出现在列表中的相同元素处,并且将具有相同的结果。

但是当您想要更多检查时,All会派上用场,例如:

if(model.ListOfImages.All(x=> !string.IsNullOrEmpty(x.PictureUrl) && x.PictureUrl.EndsWith(".jpg")))
{
return Content("");
}

答案 2 :(得分:1)

您想要查找null /空值是否存在。所以另一种选择是使用Exists()

if(model.ListOfImages.Exists(image => string.IsNullOrEmpty(x.PictureUrl)))
{
    return Content("");
}

答案 3 :(得分:0)

是的,你可以这样做。我申请如下:

var accionistas = repositorio.FindEntitySet<TBL_Accionista>(p => p.Estatus.Equals(1)).Select(a => new { a.Id_Accionista, Nombre = a.Apellido_Paterno + " " + a.Apellido_Materno + " " + a.Primer_Nombre, RazonSocial = String.IsNullOrEmpty(a.Razon_Social)?string.Empty:a.Razon_Social, a.RFC });