条件1:在下面的代码中某个时间list2
为空,因此我做了一个检查,
list2 == null ? 0 : list2.Wher.....
条件1:某些list1
名称也不在list2
中,因为我想设置Age
= 0
如何满足这两个条件?
class Program
{
static void Main(string[] args)
{
var list1 = new List<List1> { new List1 { Name = "A1" }, new List1 { Name = "A2" } };
//sometime my "list2" is null as well
//var list2 = null;
var list2 = new List<List2> { new List2 { Name = "A1", Age = 10 } };
foreach (var a in list1)
{
var X = list2 == null ? 0 : list2.Where(x => x.Name == a.Name).FirstOrDefault().Age;
}
}
}
public class List1
{
public string Name { get; set; }
}
public class List2
{
public string Name { get; set; }
public int Age { get; set; }
}
答案 0 :(得分:2)
试试这个:
foreach (var a in list1)
{
var X = list2 == null ? 0 : (list2.Where(x => x.Name == a.Name).FirstOrDefault()?.Age ?? 0);
}
答案 1 :(得分:2)
您根本不需要foreach
循环。
var x = list2 == null ? 0 :
list2.Where(x => list1.Any(e => x.Name == e.Name)).FirstOrDefault()?.Age ?? 0;
或其他变体将是:
var x = list2 == null ? 0 :
list2.FirstOrDefault(x => list1.Any(e => x.Name == e.Name))?.Age ?? 0;
答案 2 :(得分:1)
首先,看看This Documentation。它解释了我将使用的.DefaultIfEmpty
。
DefaultIfEmpty
将:
如果序列为空,则返回指定序列的元素或单例集合中的指定值。
在您的情况下,您可以做些什么来满足下一个条件:
var X = list2 == null ? 0 : list2.Where(x => x.Name == a.Name).DefaultIfEmpty(new List2 { Age = 0 }).First().Age;