0

Entity Framework で SQL クエリを使用したいと考えています。

これが私のコードです:

 string sql = (@"SELECT G.GainId,
                (SELECT Name FROM Carrier WHERE CarrierId = G.CarrierId) AS Carrier,
                (SELECT Name + ' ' + Surname FROM [User] WHERE UserId = G.GainerId) AS Gainer,
                (SELECT Name + ' ' + Surname FROM [User] WHERE UserId = G.GiverId) AS Giver,
                (SELECT Name + ' ' + Surname FROM [User] WHERE UserId = G.CustomerId) AS Customer,
                    P.Name,
                    G.Gained,
                    G.Paid
                    FROM Gain AS G 
                    INNER JOIN Product AS P ON P.ProductId = G.ProductId");

            DataTable tbl = _context.Database.SqlQuery<DataTable>(sql) as DataTable;

しかしtblヌルです。何か提案はありますか?私はEntity Frameworkが初めてです。

4

1 に答える 1

5

これSqlQueryは、 を返すことを意図していないためですDataTableIEnumerable<T>エンティティ タイプをwhere Tis your entity typeとして返すように構築されています。以下のステートメントを使用して、返されるのは列挙型であることを思い出してください。今、あなたが必要とするものをそれで実行してください。

var tbl = _context.Database.SqlQuery<{your entity type}>(sql)

編集済み

はい、実際、このタイプは非常に簡単に作成できます。実際、クエリは非常に分離されているように見えるため、クエリが実行されるクラス内にプライベート クラスを作成して、例を作成する方法を説明します。ただし、それはあなたが決めなければならないことです。以下に、クラスのテンプレートを示します。2 つのプロパティは??、関連付けられているタイプが正確にはわからないため、それらをプラグインする必要があります。

private class QueryResult
{
    public int GainId { get; set; }
    public string Carrier { get; set; }
    public string Gainer { get; set; }
    public string Giver { get; set; }
    public string Customer { get; set; }
    public string Name { get; set; }
    public ?? Gained { get; set; }
    public ?? Paid { get; set; }
}

そして、このようなステートメントを発行します...

var tbl = _context.Database.SqlQuery<QueryResult>(sql)
于 2012-08-06T11:41:37.657 に答える