「優先順位で」と述べているように、リストを順序付ける手段があるようです。この優先度が何であるかはわかりませんが、例として、「Desc」のアルファベット順であると仮定しましょう。また、(簡単にするために)これらの値が辞書にあると仮定しましょう。これを考えると、Linqステートメントをそのまま書くことができます...
dict.OrderBy(o => o.Key).FirstOrDefault(d => d != null);
例えば...
Dictionary<string,string> dict = new Dictionary<string,string>();
dict.Add("BNo", "12");
dict.Add("CNo", null);
dict.Add("ANo", null);
dict.Add("DNo", null);
dict.Add("ENo", "16");
Debug.WriteLine(dict.OrderBy(o => o.Key).FirstOrDefault(d => d.Value != null));
これにより、null 以外の最初の値が返されます。すべての値が null の場合、null が返されます。
ここにはいくつかの誤った仮定があるかもしれませんが、OrderBy と FirstOrDefault は、目標を達成するために必要なあらゆる方法で使用できるはずです。変更する必要があるのは、実際のプロパティを参照する「o.Key」と「d.Value」だけです。
たとえば、この情報がこのようなクラスにある場合...
class Info
{
public string Desc { get; set; }
public int? Number { get; set; }
}
そして、あなたはこれらのリストを持っています...
List<Info> info = new List<Info>();
それからあなたは書くことができます...
var returnValue = info.OrderBy(o => o.Desc).FirstOrDefault(d => d.Number.HasValue);