var x = new {
Name = "qwe",
Options = someList.Select(x=>x.KEY).Select(x =>
new {
Title: someOtherList.FirstOrDefault(y => y.KEY == x) != null ?
someOtherList.FirstOrDefault(y => y.KEY == x).Title :
null
}
)
}).ToList();
我正在制作一个可序列化的对象列表。请查看我如何为每个选项获取Title
属性。
我的问题是我正在获取比标题更多的属性,并且条件运算符对每个属性都感觉相当过分。
有没有“更好”的写作方式?
答案 0 :(得分:4)
一个简单的解决方案是使用以下内容:
Title= someOtherList.Where(y => y.KEY == x).Select(x => x.Title).FirstOrDefault()
这是在做以下事情:
Key
等于x
的元素。Title
。null
。答案 1 :(得分:1)
通常,与原始代码最相似的方法是使用statement lambda。
Options = someList.Select(x=>x.KEY).Select(x =>
{
var other = someOtherList.FirstOrDefault(y => y.KEY == x);
return new {
Title = other == null ? null : other.Title
};
})
答案 2 :(得分:0)
您可以改为调用方法:
Options = someList.Select(x=>x.KEY).Select(x => CreateObject(x, someOtherList));
public YourObject(or dynamic) CreateObject(YourObject x, List<SomeOtherObject> someOtherList)
{
var other = someOtherList.FirstOrDefault(y => y.KEY == x);
return new
{
Title = (other == null ? null : other.Title),
Foo = (other == null ? null : other.Foo),
...
}
}
或者使用Linq query expression中的let
关键字与@DarinDimitrov显示相同的内容。