c# - LINQ to Entities 而不是存储过程?

标签 c# linq entity-framework stored-procedures entity-framework-4

我正在使用 Entity Framework 来访问我的数据库,我只是发现使用实体将存储过程映射到方法有点太复杂,可能不太适合做我想做的事情。我是 LINQ 的新手,我想知道我是否应该只使用 ADO.NET 会更好。这是我需要翻译的 SQL 代码:

SELECT p.Player_id, p.Name, p.Position, SUM(s.Goals) AS goalsb, SUM(s.Assists) AS assistsb, SUM(s.Points) AS pointsb
FROM Dim_Player AS p INNER JOIN Fact_Statistics AS s ON s.Player_id = p.Player_id
GROUP BY p.Player_id, p.Name, p.Position
ORDER BY pointsb DESC, goalsb DESC

使用存储过程的实体映射,我编写了以下代码:

HockeyStatsEntities db = new HockeyStatsEntities();

public ActionResult Index()
{
    ViewBag.Message = "League leaders";
    {
        return View(db.ListLeagueLeaders());
    }
}

public ActionResult About()
{
    return View();
}

private ICollection<ListLeagueLeaders_Result> ListLeagueLeaders()
{
    ICollection<ListLeagueLeaders_Result> leagueLeadersCollection = null;

    using (HockeyStatsEntities context = new HockeyStatsEntities())
    {
        foreach (ListLeagueLeaders_Result leagueLeader in
                  context.ListLeagueLeaders())
        {
            leagueLeadersCollection.Add(leagueLeader);
        }
    }
    return leagueLeadersCollection;
}

这是我遇到的错误:

The model item passed into the dictionary is of type 'System.Data.Objects.ObjectResult`1[NHLStats2.Models.ListLeagueLeaders_Result]', but this dictionary requires a model item of type 'NHLStats2.Models.ListLeagueLeaders_Result'.

但我意识到这在 ?&*@... 中有点痛苦,我怎样才能使用不同的、更有效的方法重新安排它?感谢您的帮助,非常感谢。

最佳答案

您可以编写一个简单的 LINQ 查询,使用具有这 2 个表的模型,并保持它们的关系:

from p in ctx.Dim_Player
select new {p.Player_id, p.Name, Goals = p.Fact_Statstics.Select(x=>(int?)x.Goals).Sum()}

您的 Dim_Player 将拥有一个包含相关统计信息的 FactStatistics 属性。您可以使用所需的 SUM 和 COUNT 应用子查询。

上面的查询返回一个匿名类型,但您可以创建一个具有所需属性的类。

使用 (int?) 转换很重要。

关于c# - LINQ to Entities 而不是存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8543261/

相关文章:

c# - 序列化和恢复未知类

linq - 使用 LINQ 通过 Lambda 表达式查询字典

c# - 为什么这个 Linq Cast 在使用 ToList 时会失败?

c# - 用于查询 Entity Framework 上下文模型的 API?

c# - 使 WPF 弹出窗口不受屏幕限制

c# - 列表之间不能进行相交

c# - 子类中的 Nhibernate linq 提取

c# - Entity Framework 提供者错误

c# - 如何使用 Linq 处理带有 FirstOrDefault 的 NULL 对象属性

c# - 在 RavenDB 中存储/检索动态数据