0

我想在实体框架中使用 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为空。你有什么建议吗?我是实体框架的新手。

4

1 回答 1

5

那是因为SqlQuery不打算返回一个DataTable. 它旨在将您的实体类型作为您的实体类型在IEnumerable<T>哪里返回T。使用下面的语句并记住它是一个被返回的可枚举类型。现在使用它执行您需要的操作。

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

已编辑

是的,事实上你可以很容易地构建这种类型。事实上,由于查询看起来如此孤立,您可能可以在执行它的类中构建一个私有类,以便我将如何构建示例。但是,这是您需要决定的事情。下面我将给你一个类的模板。我不知道这两个属性??到底与什么类型相关,因此您需要将它们插入。

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 回答