【问题标题】:Add a single query result to a List将单个查询结果添加到列表
【发布时间】:2015-12-05 16:51:26
【问题描述】:

我需要能够从 ASP.NET DropDownList 中搜索单个名称,然后将具有该名称的 player 添加到列表中。

我的查询如下所示:

List<Player> players = new List<Player>();
var p1 = from p in db.Players
         where p.PlayerName == DropDownListPlayer1.SelectedItem.Text
         select p;

然后,我不知何故需要将此结果添加到列表中,但是

players.Add(p1);

给了我两个错误:

无法从“System.Linq.IQueryable”转换为“播放器”,

还有:

最好的重载方法匹配 'System.Collections.Generic.List.Add(Player)' 有一些无效 论据。

我尝试让查询选择一个新的 Player 实例:

var p1 = from p in db.Players
         where p.PlayerName == DropDownListPlayer1.SelectedItem.Text
         select new Player {PlayerName = p.PlayerName,
                            PlayerId = p.PlayerId};

除了将结果发送到列表中,并将列表中的第一个(也是唯一一个)玩家添加到新列表中,这一切都无济于事。

【问题讨论】:

  • 这是 windows 还是 web 先生?

标签: c# linq


【解决方案1】:

您正在查找单个名称,但Select 返回一个序列(IQueryable&lt;Player&gt;),您应该在添加到结果列表之前在查询中调用FirstSingle

var p1 = (from p in db.Players
         where p.PlayerName == DropDownListPlayer1.SelectedItem.Text
         select p).First();

players.Add(p1);

【讨论】:

  • 这种方法解决了我最初的错误,但是运行代码会导致 EntityCommandExecutionException。我试图从上下文中理解这个错误的含义,但这一切都让我有点过头了。
  • 嗯..entitycommandexecutionexception? InnerException 说明了什么?
  • @kenlacoste 在了解了 innerException 是什么之后,它说我对不再存在的列有无效的列名。我忘了更新实体模型。不要觉得我很傻。
  • 不错..至少完成了你的任务。 :)
【解决方案2】:
var p1 = (from p in db.Players
                 where p.PlayerName == DropDownListPlayer1.SelectedItem.Text
                 select new Player {PlayerName = p.PlayerName,
                                    PlayerId = p.PlayerId}
         ).FirstOrDefault();

if(p1 != null)
{
     players.Add(p1);
}

【讨论】:

    【解决方案3】:

    您的查询返回多个结果,但方法 Add 只需要一个结果。相反,您可以使用函数AddRange 添加多个结果:

    players.AddRange(p1.ToList());
    

    我也正在调用ToList 立即对数据库执行查询。

    如果尝试执行上述代码时列表players为空,更好的方法是使用方法ToList()创建列表:

    List<Player> players = (from p in db.Players
         where p.PlayerName == DropDownListPlayer1.SelectedItem.Text
         select p).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2021-04-29
      相关资源
      最近更新 更多