-2

現在、次のように db テーブルにデータがあります。

Data in table 
Desc       Value                                                                                                 
BNo        12 
CNo        Null 
ANo        15 
DNo        Null 
ENo        15 

ANo が空白の場合、BNo を表示する必要があります。BNo が空白の場合、CNo をフォームに表示します。定義された DESC (この場合は AE) の優先順位に基づいて null 以外の値を見つけたら、メソッドを終了する必要があります。これをどのように実装できますか。優先度に基づいて記述子名をハードコーディングできますが、より最適化された方法で実装することを検討しています。アドバイスをお願いします。

4

3 に答える 3

1

SQLサーバー

select top 1 *
from MyTable
where Value is not null
order by [Desc]

MySQL:

select *
from MyTable
where `Value` is not null
order by `Desc`
limit 1
于 2012-09-19T17:53:12.573 に答える
0

テーブル内の Desc フィールドの ANo、BNo、CNo などの値、またはテーブル内の Desc、ANo、BNo.. などのフィールドです。これらは実際には連絡先の詳細であるとあなたが言っているだけなので、私はこの疑いを抱きます。初めての場合は、RedFilter が答えてくれました。2番目の場合は、動的クエリがオプションになる可能性があります。優先度順にフィールドを配列に追加し、反復してクエリを作成するだけです。

于 2012-09-19T18:42:37.700 に答える
0

「優先順位で」と述べているように、リストを順序付ける手段があるようです。この優先度が何であるかはわかりませんが、例として、「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);
于 2012-09-19T18:03:49.010 に答える