У меня есть полета и сегменты информации, и я хочу иметь декартову сегментов с номером рейса Информация:Keeping двойников ссылку, сочетая элементы
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);
}
результаты:
A1 A2
A1 B2
B1 A2
B1 B2
Что я хотел бы иметь
A1, FN1
A2, FN2
A1, FN1
B2, FN2
B1, FN1
A2, FN2
B1, FN1
B2, FN2
Мне не разрешено добавлять свойства существующих классов, поскольку они исходят из ссылки wcf. Как я могу хранить информацию о номере рейса при объединении сегментов?
Я мог бы догадаться, я должен использовать что-то вроде:
var result2 = flights.SelectMany(f => f.FlightClass, (f, flightSegments) => new {f, flightSegments}).
Select(x=> new {
x.flightSegments.CartesianItems(),
x.f
});
и сделать декартово в нем
Вероятно, просто "результат переменная = flights.Select (х => x.FlightClass.Select (к => новый {FlightClass = к, = x.FlightSegment.FlightNumber самалёта})) CartesianItems();". ? Поэтому просто добавьте информацию о FlightNumber для каждого класса. – Evk
@Evk Это работает :) Пожалуйста, дайте ответ –
попробуйте сделать следующее: var result = string.Join ("\ n", полеты. Выберите (x => x.FlightClass). Выберите (x => string.Format ("(x = {0}; y = {1}) ", x [0], x [1])) ToList()); Console.WriteLine (результат); – jdweng