1

XMLフィールドを含むSQLテーブルがあります。

私がやりたいのは、各XMLフィールドのデータのルート要素の属性でソートされたSQLテーブルからすべてのデータを取得することです。

したがって、「userid」(guid)、「description」(xml)、および「type」(int)を持つアイテムのテーブルがあります。

単一のレコードは次のようになります。

1205159E-B4F9-41A9-955E-A3554AF1F21A
1
<book displayText="new book">
    <txtTitle>new book</txtTitle>
    <txtSubTitle>book 1</txtSubTitle>
    <txtAuthor>book 1 author</txtAuthor>
</book>

「displayText」でソートされたリストを返そうとしています。単純なテキストベースのソート。

私はこれを試しました

return (from i in mContext.Items
        where i.Type == Type
          &&  i.UserID == UserID
        orderby (string)i.Description.Attribute("displayName")
        select i).ToList();

しかし、私は取得し続けます:メソッド'System.Xml.Linq.XAttribute Attribute(System.Xml.Linq.XName)'はSQLへのサポートされた変換を持っていません

linqから多くのことを求めていますか..??? 確かにそうではありません..または、弾丸を噛んでsql sprocを作成し、データベースで実行する必要があります.. ???

前もって感謝します..

4

3 に答える 3

1

Linq-to-Sqlは属性を解釈できません。SQLServerへの変換に類似点がないため、送信されると、受け取ったエラーが返されます。

クライアント側でのみアクセス可能な属性などを使用して、Linq関連のアクションを引き続き実行できます。これを行うには、最初にデータをクライアント側に移動し(ToList()Linq-to-Sqlクエリのコマンドを使用)、次にローカルで並べ替える必要があります。例えば:

var query = mContext.Items.Where(i => i.Type == Type && i.UserID == UserID).ToList();
return query.OrderBy(i => i.Description.Attribute("displayName")).ToList();
于 2013-02-20T09:38:34.277 に答える
1

linq2sqlではこれを行うことはできません!!! linqの結果はSQLクエリです。linq2sqlで使用する関数は.net関数であり、SQLに実装関数はありません。すべてのデータをリストに取得し、コードで並べ替えることができます(もっと時間がかかります!!!)

その変換中、それは単なるメソッド呼び出しであり、それ以上のものではありません。Linq to Sqlは特定のメソッド呼び出しを理解しますが、あなたのメソッド呼び出しはその1つではありません。したがって、エラー。

表面的には、これは機能するはずです。再利用可能なクエリを作成し、他のクエリから作成します。ただし、実際に言っているのは、「データベースサーバーの各行の処理中に、このメソッドを呼び出す」ということです。これは明らかに実行できません。IQueryable<T>を取り、を返すという事実は、IQueryable<T>それを特別なものにしません。

于 2013-02-20T09:37:48.177 に答える
0

はい、LinqからSQLへの一致を求めています。

必要なのは、LinqtoSQLまたはLinqtoEntitiesを介してデータベースからXmlを取得し、LinqtoXmlを使用してメモリ内のデータを処理することです。

return  mContext.Items.Where(i => i.Type == Type && i.UserID == UserID)
                .ToList()
                .OrderBy(i => (string)XElement.Parse(i.Description)
                                              .Attribute("displayName"));
于 2013-02-20T09:38:25.570 に答える