请林帮忙.直接转换为Object而不是Var

本文关键字:Var Object 林帮忙 转换 | 更新日期: 2023-09-27 18:07:01

我一直通过迭代对象来忽略对LINQ的需求,但最近决定是时候抛弃老派方法,与时俱进了。

我想知道是否有人可以帮助我简化下面的代码,首先使用Lambda而不是老式的Linq,其次,下面的代码总是只返回1个值。。在这种情况下,我如何直接转换为正确的类型(Player(而不必再次迭代?

    MyEntities entity = new MyEntities();
    Guid selectedPlayerID = Guid.Parse(lbPlayers.SelectedItem.Value);

    var player = from n in entity.Players
                 where n.ID == selectedPlayerID
                 select n;
    foreach (var item in player)
    {
        tbPlayerSurname.Text = item.Name;
        tbPlayerName.Text = item.Surname;    
    }

请林帮忙.直接转换为Object而不是Var

If实体。玩家包含玩家对象,您可以简单地指定

IEnumerable<Player> players = entity.Players
.Where(p => p.ID == selectedPlayerID); 

我很难理解你的帖子,所以我最初的答案是只选择一个(阅读评论,我看到这就是你想要的(,你可以这样做:

Player player = entity.Players.Single(p => p.ID == selectedPlayerID);

如果不是唯一的错误,则会抛出和出错,您可以使用SingleOrDefault并检查null,甚至FirstOrNull,在这种情况下,如果有多个错误,则可能会吞下一个潜在的错误,并且应该会被捕获

var blahs = entity.Players.Where(x => x.ID == selectedPlayerID)
                  .Select(x => new blah() { Name = x.Name, Text = x.Surname);

这会给您一个IEnumerable<Blah>

这有道理吗?

您可以使用:

entity.Players.Single(n=>n.ID==selectedPlayerId);

如果您认为它可能不存在,请使用SingleOrDefault(并检查返回值是否与默认值不同,如果是类,则为null(。如果您只关心第一个,请使用first或FirstOrDefault。

如果**实体,请尝试下面的代码。玩家属于List<播放器>

List<Player> selectedPlayers = (from n in entity.Players 
                                where n.ID == selectedPlayerID select n).ToList();

如果实体。玩家不是类型列表<播放器>

List<Player> selectedPlayers = (from n in entity.Players 
                               where n.ID == selectedPlayerID 
                               select new Player() { Name = n.Name, Surname = n.Surname } );