我有以下代码用于选择最新的Preference对象的CreatedDate。它使用FirstOrDefault
从首选项集合中选择一个Preference对象。
的DateTime? latestPreferenceDate = preferences.FirstOrDefault()== null? null:(preferences.FirstOrDefault())。CreatedDate;
我们如何指定所选对象应该是具有最新创建日期的对象?另外,我需要选择与最新日期对应的对象来选择该对象的其他属性。
注意:我正在寻找method chaining
方法
CODE
class Program
{
static void Main()
{
Int16? test = null;
string val = Convert.ToString(test);
Collection<Preference> preferences = new Collection<Preference>();
Preference pref1 = new Preference();
pref1.CreatedDate = new DateTime(2011, 11, 11);
pref1.PreferenceCode = 1;
Preference pref2 = new Preference();
pref2.CreatedDate = new DateTime(2012, 12, 12);
pref2.PreferenceCode = 2;
preferences.Add(pref1);
preferences.Add(pref2);
DateTime? latestPreferenceDate = preferences.FirstOrDefault() == null ? null : (preferences.FirstOrDefault()).CreatedDate;
}
}
public class Preference
{
public DateTime? CreatedDate { get; set; }
public int PreferenceCode { get; set; }
}
参考:
答案 0 :(得分:1)
您可以从表格中获取LatestDate,然后在您的情况下使用它。
if(preferences != null)
{
if(preferences.Count != 0)
{
var LatestDate = preferences.Max(r=> r.CreatedDate);
var item = preferences.FirstOrDefault(r=> r.CreatedDate == LatestDate);
}
}
或者在一行中你可以做到:
if(preferences != null)
{
if(preferences.Count != 0)
{
var item = preferences.FirstOrDefault(r=> r.CreatedDate ==
preferences.Max(t=> t.CreatedDate));
}
}
答案 1 :(得分:1)
DateTime? latestPreferenceDate = preferences.Max(p => p.CreatedDate)
此外,如果您希望获得最新日期的偏好,可以使用MoreLINQ(可从NuGet获得)扩展程序MaxBy
:
var item = preferences.MaxBy(p => p.CreatedDate)
以这种方式实现(避免枚举序列两次):
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> selector)
{
IComparer<TKey> comparer = Comparer<TKey>.Default;
using (IEnumerator<TSource> sourceIterator = source.GetEnumerator())
{
if (!sourceIterator.MoveNext())
throw new InvalidOperationException("Sequence was empty");
TSource max = sourceIterator.Current;
TKey maxKey = selector(max);
while (sourceIterator.MoveNext())
{
TSource candidate = sourceIterator.Current;
TKey candidateProjected = selector(candidate);
if (comparer.Compare(candidateProjected, maxKey) > 0)
{
max = candidate;
maxKey = candidateProjected;
}
}
return max;
}
}
答案 2 :(得分:1)
试试这个
var data= preferences.Where(x=>x.CreatedDate !=null).
Orderby(x=>x.CreatedDate).
FirstOrDefault() ;
if(data!=null)
var date = data.CreatedDate;
答案 3 :(得分:1)
var c = preferences.OrderBy(x => x.CreatedDate).Reverse().FirstOrDefault();
答案 4 :(得分:0)
尝试如下,
使用MAX查找maxt CreatedDate。
DateTime? latestPreferenceDate = null;
var LatestDate = preferences.Max(r=> r.CreatedDate);
现在查找所有具有CreatedDate = LatestDate。
的记录var items = preferences.Where(r=> r.CreatedDate !=null && r.CreatedDate == LatestDate);
如果有更多记录包含LatestDate(您将获得带有LatestDate的多个项目),那么您可以使用 FirstOrDefault 来获得第一次出现,并使用 LastorDefault 进行最后一次出现。
if (items != null && items.Count > 0)
{
var first = items.FirstOrDefault();
if (first != null)
{
latestPreferenceDate = first.CreateDate();
}
//For Last
var last = items.FirstOrDefault();
if (last != null)
{
latestPreferenceDate = last.CreatedDate();
}
}
如果您只想要具有LatestDate的最后一项,请尝试使用以下代码:
var item= preferences.Where(x=>x.CreatedDate !=null).
OrderbyDescending(x=>x.CreatedDate).
FirstOrDefault();
if (item != null)
{
latestPreferenceDate = item.CreatedDate;
}