C#MVC ASP.NET从数据库中获取数据的最有效方法

min*_*int 0 c# asp.net asp.net-mvc

我是MVC和数据库的新手,但我很确定我从数据库中获取数据的方式非常低效.

public class PokemonViewController : Controller
{
    private PokemonDayCareDBEntities1 db = new PokemonDayCareDBEntities1();

    [Authorize]
    public ActionResult Pokemon(int id)
    {
        var pkmn = db.PlayerPkmns.ToList();
        PlayerPkmn thispkmn = null;

        //get pokemon from database where id = id
        foreach (var item in pkmn)
        {
            if (item.Id == id)
            {
                thispkmn = item;
            }
        }

....
Run Code Online (Sandbox Code Playgroud)

我有一个驻留在PlayerPkmns表中的Pokemon的唯一ID,但是我循环遍历整个表以找到匹配的ID.

根据表的大小,执行所需的时间会增加.

我很肯定有更好的方法 - 有人知道是否有一个(也就是如何使用它的语法)

谢谢!

Ale*_*lex 7

SingleOrDefault 是你的朋友.

改变这个:

var pkmn = db.PlayerPkmns.ToList();
Run Code Online (Sandbox Code Playgroud)

var pkmn = db.PlayerPkmns.SingleOrDefault(x => x.Id == id);
Run Code Online (Sandbox Code Playgroud)

这将(大致)转换为以下SQL

SELECT TOP 1 * FROM PlayerPkmns WHERE ID = @id
Run Code Online (Sandbox Code Playgroud)