lucamilan
4/4/2012 - 6:41 PM

NHibernate QueryOver.List extension to support casting to anonymous types

NHibernate QueryOver.List extension to support casting to anonymous types

public static IList<TRes> ListAs<TRes>(this IQueryOver qry, TRes resultByExample)
{
	var ctor = typeof (TRes).GetConstructors().First();
	return qry.UnderlyingCriteria
		.SetResultTransformer(Transformers.AliasToBeanConstructor(ctor))
		.List<TRes>();
}

[Fact]
public void ListAs_Should_CastQueryOverResultToTypeSameAsSupliedExampleInstance()
{
	var t = new { id = 0L, name = string.Empty };
	var data = Session.QueryOver<X>()
		.Where(x => x.Id == 123)
		.SelectList(sl => sl
			.Select(x => x.Id).WithAlias(() => t.id)
			.Select(x => x.Name).WithAlias(() => t.name)
		)
		.ListAs(t);

	Assert.Single(data);
	Assert.Equal(123L, data[0].id);
	Assert.Equal("name", data[0].name);
}