Raffinert.Proj
1.0.0
See the version list below for details.
dotnet add package Raffinert.Proj --version 1.0.0
NuGet\Install-Package Raffinert.Proj -Version 1.0.0
<PackageReference Include="Raffinert.Proj" Version="1.0.0" />
paket add Raffinert.Proj --version 1.0.0
#r "nuget: Raffinert.Proj, 1.0.0"
// Install Raffinert.Proj as a Cake Addin #addin nuget:?package=Raffinert.Proj&version=1.0.0 // Install Raffinert.Proj as a Cake Tool #tool nuget:?package=Raffinert.Proj&version=1.0.0
Raffinert.Proj
Usage
Full examples see in Integration Tests
Defining a Specification
Usage
Basic Projection Example
Define a projection for a product:
private class ProductProj : Proj<Product, ProductDto>
{
public override Expression<Func<Product, ProductDto>> GetExpression()
{
return p => new ProductDto
{
Id = p.Id,
Name = p.Name,
Price = p.Price
};
}
}
Use it in a LINQ query:
var productsQuery = _context.Products.Select(new ProductProj());
var projectedProducts = await productsQuery.ToArrayAsync();
Integration Tests
This project includes integration tests to verify the functionality of projections:
- Enumerable Projection: Test linking two projections for
IEnumerable
. - Queryable Projection: Test linking two projections for
IQueryable
. - Nested Select Projection: Test nested projections within LINQ
Select
calls.
Run the tests using the following command:
dotnet test
Example Test
private class CategoryProj : Proj<Category, CategoryDto>
{
public override Expression<Func<Category, CategoryDto>> GetExpression()
{
return category => new CategoryDto { Name = category.Name, IsFruit = category.Name == "Fruit" };
}
}
[Fact]
public void QueryableLinkTwoProjectionsByMap()
{
var categoryProj = new CategoryProj();
var productProj = Proj<Product, ProductDto>.Create(p => new ProductDto
{
Id = p.Id,
Name = p.Name,
Price = p.Price,
Category = categoryProj.Map(p.Category)
});
var projectedEnumerable = _context.Products.Select(productProj).ToArray();
Assert.Equivalent(new[]
{
new ProductDto
{
Id = 1,
Name = "Apple",
Price = 10.0m,
Category = new CategoryDto
{
Name = "Fruit",
IsFruit = true
}
},
new ProductDto
{
Id = 2,
Name = "Banana",
Price = 15.0m,
Category = new CategoryDto
{
Name = "Fruit",
IsFruit = true
}
},
new ProductDto
{
Id = 3,
Name = "Cherry",
Price = 8.0m,
Category = new CategoryDto
{
Name = "Fruit",
IsFruit = true
}
}
}, projectedProducts);
}
Debugging
The Proj<T>
class includes built-in debugging support with a custom debugger display, giving developers an immediate view of the underlying expression while debugging.
See also Raffinert.Spec library;
Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository.
- Create a new branch for your feature or bugfix.
- Submit a pull request for review.
License
This project is licensed under the MIT License.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.