0

を取得しようとしています。個人が持っているすべての親戚の区切られた文字列。4 つのテーブルが含まれます。

USERTAB PERSON PERSON_RELATION RELATION_TAB

クエリ

from u in USERTAB
select new
{
    Person = from p in PERSON where p.USERID == u.USERID
       select new
        {
          PNo = p.NO,
          Name = p.NAME
          Relatives = (from r in PERSON_RELATION where r.PSEQ == p.PSEQ select new
          {
            Description = (from rel in RELATION_TYPE where rel.TYPE_SEQ == r.TYPE_SEQ select rel.DESCRIPTION).ToArray() //(or also tried .ToString())
          })                                     
        }
}

説明フィールドを「;」にしたい ユーザー (人) が持っているすべての親戚の区切りリスト。

Relatives オブジェクトで ToString を使用すると、実行時にのみ失敗します。LINQ to Entities がメソッド 'System.String ToString()' メソッドを認識しない

例: 説明 = "父、兄弟、いとこ"

4

2 に答える 2

2

クエリのどの部分がサーバーで実行するために SQL に変換され、どの部分がローカル アプリケーションで実行されるかを明確にする必要があります。重要なのは、単純なクエリを作成してすべてのデータを取得し、それを使用.AsEnumerable()して残りの変換が SQL に変換されないようにし、最後にデータを便利な形式に変換することです。何かのようなもの

var query =
    from u in USERTAB
    select new
    {
        Person =
            from p in PERSON
            where p.USERID == u.USERID
            select new
            {
                PNo = p.NO,
                Name = p.NAME
                Relatives =
                    from r in PERSON_RELATION
                    where r.PSEQ == p.PSEQ
                    select new
                    {
                        Description =
                            from rel in RELATION_TYPE
                            where rel.TYPE_SEQ == r.TYPE_SEQ
                            select pos.DESCRIPTION
                    }
            }
        }
    };

var enumerable =
    from u in query.AsEnumerable()
    select new
    {
        Person =
            from p in u.Person
            select new
            {
                PNo = p.PNo,
                Name = p.Name
                Relatives =
                    string.Join(", ",
                        from r in p.Relatives
                        from d in r.Description
                        select d.Description)
            }
        }
    };

トリックを行う必要があります。

于 2012-12-03T11:46:47.347 に答える
0

これはうまくいくはずです: 配列の文字列の拡張メソッドを次のように書きます:

public static ToCsv(this string[] strings)
{
    return String.Join("," strings);
}

.ToCsv()次に、上記の呼び出しの最後にタックするだけで、.ToArray()うまくいくはずです!

于 2012-12-03T11:36:25.803 に答える