Skip to content

Instantly share code, notes, and snippets.

View karenpayneoregon's full-sized avatar
🎯
Focusing

Karen Payne karenpayneoregon

🎯
Focusing
View GitHub Profile
@karenpayneoregon
karenpayneoregon / Helpers.cs
Created May 1, 2024 11:07
Get application runtime version of .net framework
public static Version FrameworkRuntimeVersion()
{
var assembly = typeof(System.Runtime.GCSettings).GetTypeInfo().Assembly;
var path = assembly.Location.Split(new[] { '/', '\\' },
StringSplitOptions.RemoveEmptyEntries);
var index = Array.IndexOf(path, "Microsoft.NETCore.App");
return new Version((index > 0 && index < path.Length - 2 ? path[index + 1] : null)!);
}
@karenpayneoregon
karenpayneoregon / ElementContainer.cs
Last active April 30, 2024 22:20
List indices for generic list
public class ElementContainer<T>
{
public T? Value { get; set; }
public Index StartIndex { get; set; }
public Index EndIndex { get; set; }
public int Index { get; set; }
}
@karenpayneoregon
karenpayneoregon / SqlClientHelpers.cs
Last active April 22, 2024 13:56
SqlDataReader extensions
using Microsoft.Data.SqlClient;
internal static class ProviderExtensions
{
public static DateOnly GetDateOnly(this SqlDataReader reader, int index)
=> reader.GetFieldValue<DateOnly>(index);
public static async Task<DateOnly> GetDateOnlyAsync(this SqlDataReader reader, int index)
=> await reader.GetFieldValueAsync<DateOnly>(index);
@karenpayneoregon
karenpayneoregon / Create1.bat
Last active April 16, 2024 18:03
Provides a Windows batch file to generate a Visual Studio solution with benefits
@echo off
:: ------------------------------------------------------------
:: create a solution with a razor pages project and a class library
:: add Serilog packages and EF Core
:: add virtualization folders
:: add a readme.md file
:: NOTE that the Nuget packages are the latest versions as of 07-2023
:: ------------------------------------------------------------
md RazorSolution
@karenpayneoregon
karenpayneoregon / Bad.cs
Created April 8, 2024 11:48
Shows results from EF Core statements
var statement =
"""
SELECT *
FROM dbo.Customers
WHERE ContactTypeIdentifier = 9
""";
using var context = new Context();
var list = context.Customers.FromSqlRaw(statement)
.Include(c => c.Contact)
.ToList();
@karenpayneoregon
karenpayneoregon / mask.sql
Created April 5, 2024 09:59
Masking data
CREATE TABLE dbo.Taxpayers (Id INT IDENTITY PRIMARY KEY,
FullName NVARCHAR(100) NOT NULL,
Email NVARCHAR(100) NOT NULL,
Social VARCHAR(9) MASKED WITH (FUNCTION = 'partial(0,"XXXXX",4)') NOT NULL,
CreditCardNumber VARCHAR(16) MASKED WITH (FUNCTION = 'partial(0, "XXXX-XXXX-X-", 4)') NULL,
BirthDate DATE NOT NULL);
public interface ISample
{
public void AcceptCallMethod();
void CallerMethod() { }
}
public class Sample : ISample
{
void ISample.AcceptCallMethod()
{
@karenpayneoregon
karenpayneoregon / FindMissingIndexes.sql
Created April 4, 2024 16:32
Useful if there is a need to find gaps in SQL-Server table index.
DECLARE @BrokenTable TABLE (ID INT NOT NULL);
INSERT INTO @BrokenTable VALUES (1);
INSERT INTO @BrokenTable VALUES (3);
INSERT INTO @BrokenTable VALUES (5);
INSERT INTO @BrokenTable VALUES (7);
INSERT INTO @BrokenTable VALUES (9);
WITH CTE
AS (SELECT 1 AS Number
UNION ALL
SELECT Number + 1
@karenpayneoregon
karenpayneoregon / Example.cs
Created April 4, 2024 13:45
Get DotNet version at runtime
public static Version FrameworkRuntimeVersion()
{
var assembly = typeof(System.Runtime.GCSettings).GetTypeInfo().Assembly;
var path = assembly.Location.Split(new[] { '/', '\\' }, StringSplitOptions.RemoveEmptyEntries);
var index = Array.IndexOf(path, "Microsoft.NETCore.App");
return new Version((index > 0 && index < path.Length - 2 ? path[index + 1] : null)!);
}
static void Main(string[] args)
{
int current = 20240403;
int birthDate = 19000924;
Console.WriteLine((current - birthDate).ToString()[..^4]);
Console.WriteLine((current - birthDate).ToString().RemoveLastCharacters());