C#MVC ASP.NET从ID为

时间:2017-05-22 12:27:38

标签: 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;
            }
        }

....

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:7)

Log.d(TAG, debugMessage)是你的朋友。

改变这个:

SingleOrDefault

var pkmn = db.PlayerPkmns.ToList();

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

var pkmn = db.PlayerPkmns.SingleOrDefault(x => x.Id == id);

答案 1 :(得分:3)

检索实体的最有效方法是使用.Find() 其中primaryKey是您传入的ID。

var PlayerPkmn= db.PlayerPkmns.Find(primaryKey)

答案 2 :(得分:1)

当您使用Linq to Entities时,您应该能够将Where()FirstOrDefault()结合使用:

var pkmn = db.PlayerPkmns.Where(x=>x.Id  == id).FirstOrDefault();

你现在正在做的事情将导致所有记录被带入记忆中,这不是你想要的,而且它的性能将比你现在的方式高很多,就像你的方式一样这样做,它会将所有记录加载到内存中。

答案 3 :(得分:-1)

我认为db.PlayerPkmns.SingleOrDefault(x => x.Id == id)实体框架数据上下文。 在这种情况下,如果要处理数据库中不存在实体的情况,可以使用db.PlayerPkmns.Single(x => x.Id == id) //Change the name id in the xml file Button microsoftButton = (Button) findViewById(R.id.microsoftButton); TextView scoreTextView = (TextView) findViewById(R.id.scoreTextView); microsoftButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(),"Wrong!", Toast.LENGTH_SHORT).show(); // This was declared above so now you can use it. You can only set it to a String not to an Integer. scoreTextView.setText("0"); } }); cordova platform update ios 如果您确定严格中只有一个元素DB(如果实体不存在则抛出)。