, , someId , .
, someId? NULL?
, ? , ?
, , RepoElements, 3 RepoElements,
- result 1= Id = someId. .
- result [0] = < 1. .
- result [2] = Data > 1.Date
" " 1. Select with Min Max, [0] [2] . , SingleOrDefault, 1:
var result = repo
.Where(repoElement => repoElement.Id == someId)
.Select( result1 => new RepoElement[]
{
repo.Where(repoElement => repoElement.Date < result1.Date)
.Max(repoElement => repoElement.Date),
result1,
repo.Where(repoElement => repoElement.Date > result1.Date)
.Min(repoElement => repoElement.Date),
})
.SingleOrDefault();
, : . : , , , , , . , , ,
: / , Max , NULL
, c.q. , .
, Max, , , . MSDN Enumerable.Max , Max IComparable.
, IComparable, .
private class RepoElement: IComparable<MyData>
{
public int Id {get; set;}
public string Name {get; set;}
public DateTime Date {get; set;}
public int CompareTo(RepoElement other)
{
return this.Date.CompareTo(other.Date);
}
}
var result = repo
.Where(repoElement => repoElement.Id == someId)
.Select( result1 => new RepoElement[]
{
repo.Where(repoElement => repoElement.Date < result1.Date).Max(),
repoElement,
repo.Where(repoElement => repoElement.Date > result1.Date).Min(),
}
Enumerable.Max(), TSource.
, , IEnumerable, IQueryable. .
, IQueryable ( ), Enumerable.Aggregate [0] [2].
, , "", "" , , "", .. , "".
var result = repo
.Where(repoElement => repoElement.Id == someId)
.Select(repoElement => new RepoElement[]
{
repo.Where(element => element.Date < repoElement.Date)
.Aggregate(
(largest, next) => next.Date > largest.Date ? next : largest),
repoElement,
repo.Where(element => element.Date > repoElement.Date)
.Aggregate(
(smallest, next) => next.Date < smallest.Date ? next : smallest),
})
.SingleOrDefault();