0

これは簡単な質問かもしれませんが、次のコードがあります。

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 

しかし、tv が null のときに pv を選択する必要があり、その逆も同様です。また、LINQ の知識を増やしたいので、興味深いガイドは素晴らしいものです。

EDITもう少し情報を提供するために、tvはデータレコードのサブクラスを分解するので、それらのフィールドを文字列lolで検索できます。基本的にnullではない結果を返すものを選択しようとしています。

4

2 に答える 2

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;

ただし、戻り値の型は 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 new { pv, tv };
foreach(var v in values)
{
    if (v.tv == null) ...
}
于 2013-03-28T17:12:08.223 に答える
0

注意: これはハックです ( o_O )。ただし、nullの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 ((object)tv ?? (object)pv);

IEnumerableを使用する前に、必ずアンボックスしてくださいvalues

于 2013-03-28T17:25:16.790 に答える