C# 当一个项目为空时,如何在LINQ中选择一个项目
这可能是一个简单的问题,但我有以下代码:C# 当一个项目为空时,如何在LINQ中选择一个项目,c#,linq,C#,Linq,这可能是一个简单的问题,但我有以下代码: string lol = "540"; var values = from pv in dataRecords.Values where pv.ID.Contains(lol) || pv.TotalLength.Contains(lol) from tv in pv.MyProperty
string lol = "540";
var values = from pv in dataRecords.Values
where pv.ID.Contains(lol)
|| pv.TotalLength.Contains(lol)
from tv in pv.MyProperty
where tv.name.Contains(lol)
|| tv.length.Contains(lol)
|| tv.startByte.Contains(lol)
select
但我需要在电视为空时选择pv,反之亦然。我知道这很简单,但这是一天的结束,我现在无法思考。我还想增加我的LINQ知识,这样任何有趣的指南都会很棒
编辑提供更多信息tv分解了数据记录的一个子类,因此我可以搜索字符串lol中的字段。我只是想选择一个返回结果基本上不为空的字段 如果
pv
和tv
恰好是同一类型,您可以这样做:
var values = from pv in dataRecords.Values
where pv.ID.Contains(lol)
|| pv.TotalLength.Contains(lol)
from tv in pv.MyProperty
where tv.name.Contains(lol)
|| tv.length.Contains(lol)
|| tv.startByte.Contains(lol)
select tv ?? pv;
var values = from pv in dataRecords.Values
where pv.ID.Contains(lol)
|| pv.TotalLength.Contains(lol)
from tv in pv.MyProperty
where tv.name.Contains(lol)
|| tv.length.Contains(lol)
|| tv.startByte.Contains(lol)
select new { pv, tv };
foreach(var v in values)
{
if (v.tv == null) ...
}
但是,您只能有一种返回类型,因此如果pv
和tv
是不同的类型,您将遇到问题。您可以这样做:
var values = from pv in dataRecords.Values
where pv.ID.Contains(lol)
|| pv.TotalLength.Contains(lol)
from tv in pv.MyProperty
where tv.name.Contains(lol)
|| tv.length.Contains(lol)
|| tv.startByte.Contains(lol)
select tv ?? pv;
var values = from pv in dataRecords.Values
where pv.ID.Contains(lol)
|| pv.TotalLength.Contains(lol)
from tv in pv.MyProperty
where tv.name.Contains(lol)
|| tv.length.Contains(lol)
|| tv.startByte.Contains(lol)
select new { pv, tv };
foreach(var v in values)
{
if (v.tv == null) ...
}
注意:这是一个黑客攻击(o_o)。但如果
pv
为空,则返回tv
:
var values = from pv in dataRecords.Values
where pv.ID.Contains(lol)
|| pv.TotalLength.Contains(lol)
from tv in pv.MyProperty
where tv.name.Contains(lol)
|| tv.length.Contains(lol)
|| tv.startByte.Contains(lol)
select ((object)tv ?? (object)pv);
请记住在使用
值之前取消装箱
IEnumerable。pv当tv为空时,反之亦然
您可以从pv.MyProperty
中选择tv
。当pv
为空时,如何选择tv
?