Je vol et les segments d'information et je veux avoir cartésienne des segments avec des informations de numéro de vol:Tenue frères et soeurs référence tout en combinant les éléments
class FlightSegment{
public string FlightNumber {get;set;}
}
class Flight{
public FlightSegment FlightSegment {get;set;}
public List<string> FlightClass {get;set;}
}
class FlightSegmentAndFlight{
public string FlightSegmentName {get;set;}
public string FlightNumberName {get;set;}
}
static class Utils {
//util for make cartesian of segments
public static IEnumerable<IEnumerable<T>> CartesianItems<T>(this IEnumerable<IEnumerable<T>> sequences) {
IEnumerable<IEnumerable<T>> emptyProduct =
new[] { Enumerable.Empty<T>() };
IEnumerable<IEnumerable<T>> result = emptyProduct;
foreach (IEnumerable<T> sequence in sequences) {
result = from accseq in result from item in sequence select accseq.Concat(new[] { item });
}
return result;
}
}
void Main()
{
var f1 = new Flight(){
FlightSegment = new FlightSegment{FlightNumber = "FN1"},
FlightClass = new List<string> {"A1","B1"}
};
var f2 = new Flight{
FlightSegment = new FlightSegment{FlightNumber = "FN2"},
FlightClass = new List<string> {"A2","B2"}
};
var flights = new List<Flight>{f1,f2};
var result = flights.Select(x => x.FlightClass).CartesianItems();
Console.WriteLine(result);
}
résultats:
A1 A2
A1 B2
B1 A2
B1 B2
Ce que je voudrais avoir
A1, FN1
A2, FN2
A1, FN1
B2, FN2
B1, FN1
A2, FN2
B1, FN1
B2, FN2
Je ne suis pas autorisé à ajouter des propriétés de classes existantes car elles proviennent de la référence wcf. Comment puis-je conserver les informations de numéro de vol en combinant des segments?
je pouvais deviner que je devrais utiliser quelque chose comme:
var result2 = flights.SelectMany(f => f.FlightClass, (f, flightSegments) => new {f, flightSegments}).
Select(x=> new {
x.flightSegments.CartesianItems(),
x.f
});
et faire cartésienne dans ce
Probablement juste "var result = flights.Select (x => x.FlightClass.Select (fc => new {FlightClass = fc, FlightNumber = x.FlightSegment.FlightNumber})) CartesianItems();". ? Il suffit donc d'ajouter des informations sur FlightNumber à chaque classe. – Evk
@Evk Cela fonctionne :) S'il vous plaît faites-le répondre –
essayez: var result = string.Join ("\ n", vols.Sélectionnez (x => x.FlightClass) .Sélectionnez (x => chaîne.Format ("(x = {0}; y = {1}) ", x [0], x [1])). ToList()); Console.WriteLine (résultat); – jdweng