Quello che avrei dovuto chiedere prima è. . .
Cosa vuoi fare dopo averli ordinati?
La risposta a questo potrebbe avere un grande impatto sulla potenziale soluzione.
Se la risposta è qualcosa come ho bisogno di visualizzare un elenco delle date, dove è necessario solo le date in ordine. In tal caso, non è necessario unire i due elenchi, è possibile ottenere una sequenza delle sole date ordinate e utilizzarle ad es.
var orderedDates = networks.Select(n => n.NetworkingDate)
.Union(privateNetworks.Select(n => n.DateCreation))
.OrderBy(date => date);
Se la risposta è ho bisogno di visualizzare un elenco di link che mostra la data che si collega alla Id dell'oggetto, e qualcosa per identificare il tipo di oggetto, allora si potrebbe ottenere via con qualcosa di molto come sopra, con un oggetto Anonimo.
var orderedDates = networks.Select(n => new {Date = n.NetworkingDate, Id = n.NetWorkingId, NetworkType = n.GetType().Name})
.Union(privateNetworks.Select(n => new {Date = n.DateCreation, Id = n.PrivateNetWorkingId, NetworkType = n.GetType().Name}))
.OrderBy(n => n.Date);
Tuttavia, se la risposta è ho bisogno di inviare un comando di spegnimento() per le 10 reti più antiche allora si ha realmente bisogno di una soluzione polimorfico, dove si ha un unico tipo che è possibile chiamare un Metodo Shutdown()
, che verrà risolto con il metodo specifico Shutdown()
sui tipi che stai utilizzando.
Una soluzione polimorfico di utilizzare solo se l'utente khellang's answer non funziona per voi
Da un commento su un'altra risposta
@BinaryWorrier Ho scelto questa risposta perché ho già record in il database, quindi se scelgo di aggiungere una nuova interfaccia, come faccio a trattare con i record già archiviati prima di aggiungere l'interfaccia?
Trovo difficile credere che il vostro ORM non permetterà di aggiungere un'interfaccia per una classe entità e non - in qualche modo - segnano l'interfaccia e/o è membro quindi sono ignorati dal ORM.
Tuttavia, supponendo che non sia possibile aggiungere una nuova interfaccia o classe base, è ancora possibile farlo in modo polimorfico.
aggiungere l'interfaccia, aggiungere una classe che implementa l'interfaccia che per ciascuna delle vostre classi di rete (i Abstractor
classi), poi trasformare le classi di rete in Abstractor
classi, aggiungendoli a un List<INetwork>
e smistamento quella lista.
public interface INetwork
{
DateTime? Date { get; }
}
public class PrivateNetworkAbstractor
:INetwork
{
private PrivateNetwork network;
public PrivateNetworkAbstractor(PrivateNetwork network)
{
this.network = network;
}
public DateTime? Date
{
get { return network.DateCreation; }
}
}
public class NetworkingAbstractor
: INetwork
{
private Networking networking;
public NetworkingAbstractor(Networking networking)
{
this.networking = networking;
}
public DateTime? Date
{
get { return networking.NetWorkingDate; }
}
}
...
public IEnumerable<INetwork> MergenSort(IEnumerable<Networking> generalNetWorks, IEnumerable<PrivateNetwork> privateNetWorks)
{
return generalNetWorks.Select(n => new NetworkingAbstractor(n)).Cast<INetwork>()
.Union(privateNetWorks.Select(n => new PrivateNetworkAbstractor(n)).Cast<INetwork>())
.OrderBy(n=> n.Date);
}
Hai provato qualcosa? Unione di Linq Join OrderBy può aiutare ... –
Sì, ho provato Union, ma il problema è come ordinarli perché non hanno lo stesso campo – kbaccouche
Puoi 'Selezionare' entrambi su un oggetto anonimo comune –