2016-12-21 1 views
1

Можно ли использовать выражение без запроса, чтобы сгладить список одного типа в список другого типа?Использование выражения без запроса для сглаживания списка одного типа другому

public class TypeQuote 
{ 
    public string symbol { get; set; } 
    public string type { get; set; } 
    public decimal price { get; set; } 
} 

public class BidAskQuote 
{ 
    public string symbol { get; set; } 
    public decimal bidPrice { get; set; } 
    public decimal askPrice { get; set; } 

} 

List<TypeQuote> quotes = new List<TypeQuote>(); 

quotes[0] = new TypeQuote() { symbol = "IBM", type = "Bid", price = 167.24M }; 
quotes[1] = new TypeQuote() { symbol = "IBM", type = "Ask", price = 167.35M }; 
quotes[2] = new TypeQuote() { symbol = "MSFT", type = "Bid", price = 63.46M }; 
quotes[3] = new TypeQuote() { symbol = "MSFT", type = "Ask", price = 63.52M }; 

List<BidAskQuote> bidAskQuotes = 
quotes.GroupBy(g => g.symbol, new BidAskQuote { symbol = g.symbol, ??? }).ToList(); 

Я застрял на выяснении того, как выборочно назначать поля bidPrice и askPrice в выражении.

ответ

1

Вы можете дополнительно отфильтровать группу как:

List<TypeQuote> quotes = new List<TypeQuote>(); 

    quotes.Add(new TypeQuote() { symbol = "IBM", type = "Bid", price = 167.24M }); 
    quotes.Add(new TypeQuote() { symbol = "IBM", type = "Ask", price = 167.35M }); 
    quotes.Add(new TypeQuote() { symbol = "MSFT", type = "Bid", price = 63.46M }); 
    quotes.Add(new TypeQuote() { symbol = "MSFT", type = "Ask", price = 63.52M }); 

    var bidAskQuotes = quotes 
     .GroupBy(g => g.symbol) 
     .Select(grp => new BidAskQuote 
      { 
       symbol = grp.Key, 
       askPrice = grp.Where(x => x.type == "Ask").Select(x => x.price).FirstOrDefault(), 
       bidPrice = grp.Where(x => x.type == "Bid").Select(x => x.price).FirstOrDefault() 
      }); 
Смежные вопросы