我需要能够从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};
除了将结果发送到列表,并将列表中的第一个(也是唯一的)播放器添加到新列表之外,一切都无济于事。
答案 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>
),您应该在查询中调用First
或Single
,然后再添加到结果中列表:
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);
}