cag*_*gin 0 asp.net entity-framework-4 c#-4.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;
Run Code Online (Sandbox Code Playgroud)
但是tbl没有.你有什么建议吗?我是Entity Framework的新手.
那是因为SqlQuery并不意味着要回归DataTable.它的建成,来回报您的实体类型为IEnumerable<T>这里T是你的实体类型.使用下面的语句并记住它是一个可返回的可枚举类型.现在用它来执行你需要的东西.
var tbl = _context.Database.SqlQuery<{your entity type}>(sql)
Run Code Online (Sandbox Code Playgroud)
是的,事实上你可以很容易地构建这种类型.事实上,因为查询似乎是如此孤立,所以你可以在它执行的类中构建一个私有类,以便我将如何构建示例.但是,这是你需要决定的事情.下面我将为您提供课程模板.这两个属性??我不确切知道它们与哪种类型相关联,所以你需要插入它们.
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; }
}
Run Code Online (Sandbox Code Playgroud)
然后像这样发表声明......
var tbl = _context.Database.SqlQuery<QueryResult>(sql)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |