3

次の SQL クエリを使用して、データベースから最初の 2 列のデータを取得しようとしています。

SELECT  Id, DomainUrl
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY Id ) AS RowNum, Id, DomainUrl
          FROM      SiteDatas
        ) AS RowConstrainedResult
WHERE   RowNum >= 1
    AND RowNum <= 10
ORDER BY RowNum

私はエンティティ フレームワークを使用し、行のパラメーターを渡して、後で ajax を介してロード機能のスクロールとして使用できるようにしています。ただし、次の行に到達するとエラーが発生します。

var stores = db.SiteDatas.SqlQuery(SQL, parameters).ToList();

これはエンティティ コマンド実行例外であり、データ リーダーが指定されたモデル (my db) のメンバーである 'Robots' (呼び出している列の次の列) と互換性がないことを示しています。同じ名前のデータ リーダーの列。

最初の 2 つの列だけを json としてシリアル化できる方法で取得するにはどうすればよいですか?

4

1 に答える 1

7

DbSet.SqlQueryおよびDatabase.SqlQueryコマンドは両方ともエンティティ インスタンスを返しますSQL クエリは、エンティティと同じ列を返す必要があります。ほとんどの場合、SiteData クラスに、SQL クエリに存在しない列が含まれています。Robots

戻り値の型を指定すれば、引き続きDatabase.SqlQuery< T >を使用してデータを返すことができます。戻り値の型はエンティティ型である必要はありません。結果セットと同じ列名を持つだけです。

dbがインスタンスであると仮定すると、次のDbContextように記述できます。

public class MyResults
{
   public int ID{get;set;}
   public string DomainUrl {get;set;}
}

...

var stores = db.Database.SqlQuery<MyResults>(SQL, parameters).ToList();
于 2013-07-16T10:04:54.150 に答える