Linq Помогите пожалуйста .. Прямое приведение к Object вместо Var - PullRequest
0 голосов
/ 31 августа 2011

Я всегда игнорировал необходимость 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;    
    }

Ответы [ 4 ]

3 голосов
/ 31 августа 2011

Если entity.Players содержат объекты Player, вы можете просто указать

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

У меня были проблемы с пониманием вашего поста, поэтому мой первоначальный ответ был на самом деле выбрать только один (и, читая комментарии, я вижу, это то, что вы хотели), который вы могли бы сделать так:

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

Это выбрасывает и выдает ошибку, если не существует одного, вы можете использовать SingleOrDefault и проверить на ноль, или даже FirstOrNull, в этом случае вы рискуете проглотить потенциальную ошибку, если их было больше одной, и которая должна быть поймана

1 голос
/ 31 августа 2011

Попробуйте этот код ниже, если ** entity.Players имеет тип Список

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

И если entity.Players не относится к типу Список

List<Player> selectedPlayers = (from n in entity.Players 
                               where n.ID == selectedPlayerID 
                               select new Player() { Name = n.Name, Surname = n.Surname } );
1 голос
/ 31 августа 2011

Вы можете использовать:

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

если вы думаете, что он может не существовать, используйте SingleOrDefault (и проверьте, чтобы возвращаемое значение отличалось от значения по умолчанию, ноль в случае классов). если вы заботитесь только о первом, используйте First или FirstOrDefault.

1 голос
/ 31 августа 2011
var blahs = entity.Players.Where(x => x.ID == selectedPlayerID)
                  .Select(x => new blah() { Name = x.Name, Text = x.Surname);

Это дает вам IEnumerable<Blah>.

Это имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...