0

同じIDに対して複数のデータを持つテーブルがあります。このデータを組み合わせる必要があります。

たとえば、このテーブルには次のものが含まれます

ID    Visit DAte       Visit number    Rational 
-----------------------------------------------
1     14/05/2011           1           new
1     15/06/2012           2           Emergency 
1     17/07/2012           3           Check-Up

最大20回の訪問

欲しい結果はこんな感じ

ID    Visit DAte       Visit number    Rational 
-------------------------------------------------
1     14/05/2011           1           new
1     15/06/2012           2           Emergency 
1     17/07/2012           3           Check-Up

1     14/05/2011           1           new
1     15/06/2012           2           Emergency 
1     19/07/2012           4           follwo-up

1     14/05/2011           1           new
1     15/06/2012           2           Emergency 
1     18/12/2012           5           Check-Up

etc.... 

最後は

1     14/01/2011           18          Referral 
1     15/02/2012           19          Check-up
1     18/10/2012           20          Emergency

クエリでこれを行うことはできますか?

//-クラスを定義し、そのクラスからリストを定義します

public struct ACVsize5
{
    public int ID;
    public DateTime date;
    public int RaId;
    public int HpId;
    public int DgId;
    public int VisitNum;
}

List<ACVsize5> patient = new List<ACVsize5>();

私はこのクエルを使用しましたが、これは2つの値を選択しますが、3つ以上を取得する必要があります

var query = patient.SelectMany((value, index) => patient.Skip(index + 1),
                          (first,second) => new { first, second });

// - 編集

他の4人の患者と一致させるために1人の患者の組み合わせをチェックする必要があります

一致する場合は最初の組み合わせを生成することを思いつきましたが、残りを生成し続けますが、この操作は、以下のコードのパフォーマンスを向上させる方法を処理するのに長い時間がかかりましたか?

for (int j = 0; j < 10000; j++)
        {

            int id1 = getid(names[j].ToString(), 10000);

            for (int t = 0; t < 10000; t++)
            {
                generate_firstACV5A(id1, nvisit(id1), names[j].ToString());

                int id2 = getid(names[t].ToString(), 10000);
                if (id1 == id2) { }
                else
                {
                    generate_firstACV5B(id2, nvisit(id2), names[t].ToString());

if (comparefirst()==true)
                    {

if (count == 0)
                        {
                            safecount++;
                            if (safecount == 4) break;
                        }
4

1 に答える 1

2

3つのセットを生成するサンプルコードを次に示します。クエリを処理できるようにした場合、ORMがこれをどのように処理するかはわかりませんが、オブジェクトとしてローカルに持っている場合はわかりません。

var queried = ... // example:  Enumerable.Range(1, 20).Select(n => new { FK = n });

var sets =
    from a in queried
    from b in queried
    from c in queried
    where a.FK < b.FK && b.FK < c.FK
    select new { a, b, c };

コードの使用:

List<ACVsize5> patient = ... // filled by you but I assume a single unique ID

var sets =
    from a in patient
    from b in patient
    from c in patient
    where a.VisitNum < b.VisitNum && b.VisitNum < c.VisitNum
    select new {a, b, c}
于 2012-11-25T19:46:17.523 に答える