2011-08-31 26 views
0

我一直忽略對LINQ的需求,通過迭代對象,但最近決定留下舊學校方法和時間。Linq幫助請..直接鑄造到對象而不是Var

我想知道是否有人可以通過首先使用Lambda代替老派Linq來簡化下面的代碼,其次,下面的代碼將總是隻返回1個值。我如何直接轉換爲正確的類型(玩家)在這種情況下,無需再次迭代?

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;  
    } 
+0

謝謝大家。這是超快速和偉大的答案...從發佈到解決方案14分鐘..你不能像任何地方購買支持合同 – Fox

回答

3

如果entity.Players包含播放器對象,可以簡單地指定

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

我無法理解你的文章,所以我最初的回答實際上只選擇一個(和閱讀評論我看到是你想要的),你可以這樣做:如果沒有excatly一個

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

這將引發和錯誤,你可以使用的SingleOrDefault和檢查空,甚至FirstOrNull,在這種情況下,你可能會吞下一個潛在的錯誤,如果有超過一個和第四在被認爲陷入

+0

謝謝。這工作完美!欣賞它。 – Fox

+0

請注意,如果您確定它會**返回值,則應該使用'Single''並讓CLR爲您拋出異常,以防返回多於/少於1個結果。 –

+0

我敢肯定,它將始終返回一個值,只有1 .. ID列是一個表上的主鍵列GUIDs – Fox

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

這給你一個IEnumerable<Blah>

是否有意義?

+0

謝謝埃裏克。這提供了另一種方式,但PerHornshøj-Schierbeck的解決方案對我來說最適合。謝謝。 – Fox

1

您可以使用:

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

,如果你認爲它可能不存在使用的SingleOrDefault(和檢查返回值是在類案件不同於默認值,NULL)。 如果你只關心第一個使用First或FirstOrDefault的話。

1

試試下面這段代碼,如果** 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 }); 
+0

感謝隊友。是的,entity.Players包含Player對象。對我來說,easist解決方案是:Player player = ent.Players.SingleOrDefault(p => p.ID == selectedPlayerID); 我應該提到該實體包含強類型對象。 – Fox

+0

很好。快樂編碼..我們可以從很多答案中學到很多東西。這是StackOverflow中最棒的部分。 – Somnath