2013-03-28 72 views
0

這可能是一個簡單的問題,但我有以下代碼:如何選擇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 
        where tv.name.Contains(lol) 
        || tv.length.Contains(lol) 
        || tv.startByte.Contains(lol) 

        select 

,但我需要選擇PV電視時爲空,反之亦然我知道這非常簡單,但它是一天結束,我現在不能想。也想增加我的LINQ知識,所以任何有趣的指南都會很棒。

編輯爲了給更多的信息電視打破了datarecords的一個子類,所以我可以搜索這些字段的字符串lol。我只是想選擇一個返回結果基本不爲null。

+2

'pv當電視爲空,反之亦然'你從'pv.MyProperty'選擇'tv'。如何在'pv'爲空時選擇'tv'? –

回答

1

如果pvtv碰巧是同類型的,你可以這樣做:

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; 

但是,你只能有一個返回類型,所以如果pvtv是不同的類型,你會遇到的問題。你可以這樣做:

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) ... 
} 
0

注意:這是一個破解(O_O)。但它會導致tv如果pv爲null返回:

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); 

記住拆箱你消耗values的IEnumerable之前。

相關問題