将单个查询结果添加到List

时间:2015-12-05 08:11:39

标签: c# linq

我需要能够从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};

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

3 个答案:

答案 0 :(得分:1)

您的查询返回多个结果,但方法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();

答案 1 :(得分:1)

您正在寻找单个名称,但Select会返回一个序列(IQueryable<Player>),您应该在查询中调用FirstSingle,然后再添加到结果中列表:

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

players.Add(p1);

答案 2 :(得分:1)

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);
}