F #
F # .NET- , ( ).
, # :
public class Envelope<T> : IComparable<Envelope<T>>, IEquatable<Envelope<T>>, ...
{
public Guid Id { get; private set; }
public Guid StreamId { get; private set; }
public DateTimeOffset Created { get; private set; }
public T Item { get; private set; }
public Envelope( Guid id, Guid streamId, DateTimeOffset created, T item ) {
this.Id = id;
this.StreamId = streamId;
this.Created = created;
this.Item = item;
}
}
F #, F # , .
, select # :
select new Envelope<QuestionnaireEvent>(
event.Id, streamId, event.Timestamp,
JsonConvert.DeserializeObject<QuestionnaireEvent>(event.Payload) )
Entity Framework
, Entity Framework . : , :
from e in ...
let env = new Envelope<E>( e.Id, ... )
where env.Id > 0
select env
Entity Framework , , , e.Id, , env.Id. F #, .NET.
Entity Framework, , , Envelope F # . . , Entity Framework F # .
( : # , EF )
, Envelope . - , :
type Envelope<'T>() =
member val Id : Guid = Guid.Empty with get, set
member val StreamId : Guid = Guid.Empty with get, set
member val Created : DateTimeOffset = DateTimeOffset.MinValue with get, set
member val Item : 'T = Unchecked.defaultof<'T> with get, set
:
select Envelope<_>( Id = event.Id, StreamId = streamId, ... )
select Seq.map
Seq.map . IQueryable, SQL Entity Framework. EF , query, SQL Server. Seq.map .
Seq.map CLR, SQL, , , , .
"" : , , Event . , .
,
, Envelope ( ), : JsonConvert.DeserializeObject SQL, Entity Framework . , , - CLR, , SQL.