我有这样的第一个实体列表:
public partial class Networking :EntityBase
{
public virtual int NetWorkingId
{
get;
set;
}
public virtual string NetWorkingParam
{
get;
set;
}
public virtual System.DateTime NetWorkingDate
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
我有第二个这样的实体列表:
public partial class PrivateNetwork :EntityBase
{
public virtual int PrivateNetworkId
{
get;
set;
}
public virtual int ContaId
{
get { return _contaId; }
set
{
if (_contaId != value)
{
if (Contact != null && Contact.ContaId != value)
{
Contact = null;
}
_contaId = value;
}
}
}
public virtual Nullable<System.DateTime> DateCreation
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在一个中收集这两个列表,并按日期对所有元素进行排序.
那可能吗 ?
使用多态可以很容易地解决这个问题; 为这两个类使用公共基类或接口,这些类具有DateTime
要排序的属性.
例:
public abstract class NetworkingBase : EntityBase
{
public DateTime DateToSortOn { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
要么
public interface INetworking
{
public DateTime DateToSortOn { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后让你的类派生NetworkingBase
或实现INetworking
:
public partial class Networking : NetworkingBase
{
...
}
public partial class PrivateNetwork : NetworkingBase
{
...
}
Run Code Online (Sandbox Code Playgroud)
要么
public partial class Networking : EntityBase, INetworking
{
...
}
public partial class PrivateNetwork : EntityBase, INetworking
{
...
}
Run Code Online (Sandbox Code Playgroud)
做一个LINQ Union
或Concat
然后在OrderBy
对所得到的集合.
你可以做到这一点,虽然它不是很漂亮,你最终会得到一个,IEnumerable<object>
所以你必须检查每个项目的类型才能使用它:
IEnumerable<object> sorted = myNetworkingList
.Concat<object>(myPrivateNetworkList)
.OrderBy(n => n is Networking
? (DateTime?)((Networking)n).NetWorkingDate
: ((PrivateNetwork)n).DateCreation);
foreach (object either in sorted)
{
if (either is Networking)
// Networking; do something
else
// PrivateNetwork; do something else
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6207 次 |
最近记录: |