Count that day lost
If you sit down at set of sun,
And count the acts that you have done,
And counting, find
One self-denying deed, one word,
That eased the heart of him who heard,
One glance most kind,
That fell like sunshine where it went --
Then you may count that day well spent,
But if through all the livelong day,
You’ve cheered no heart, by yea or nay --
If, through it all
You’ve nothing done that you can trace,
That brought the sunshine to one face --
No act most small.
Then count that day as worse than lost.
If you've got LINQ available to you, you can use Union, Except, Intersect, and Distinct:
- array1.Union(array2).Distinct().ToList()
- array2.Except(array1)
- array1.Except(array2)
- array1.Intersect(array2)
Reference
You want to add a unique index to a table, and unfortunately, there are already many duplicate rows in it. Manually find and delete these rows is time-wasting and error-prone. So why won't we just write one SQL statement and quickly resolve it?
First try, I wrote the following statement, and it won't work:
DELETE FROM PromotionSkus A
WHERE
A.SkuId IN (SELECT SkuId FROM PromotionSkus B GROUP BY B.SkuId HAVING COUNT(B.SkuId) > 1)
AND
A.Id NOT IN (SELECT MIN(Id) FROM PromotionSkus C GROUP BY C.SkuId HAVING COUNT(C.SkuId) > 1);
AND this one below works!
DELETE FROM PromotionSkus A
WHERE
A.Id NOT IN (SELECT Id FROM (SELECT MIN(Id) AS Id, COUNT(SkuId) AS Total FROM PromotionSkus GROUP BY SkuId HAVING Total > 1) AS B)
AND
A.SkuId IN (SELECT SkuId FROM (SELECT SkuId FROM PromotionSkus GROUP BY SkuId HAVING COUNT(SkuId) > 1) AS C);
The reason is well explained in this brilliant article.
However, I found a much simpler solution on 23-Mar-2025, which is
DELETE FROM PromotionSkus
WHERE Id NOT IN (
SELECT Id FROM (
SELECT MIN(Id) AS Id
FROM PromotionSkus
GROUP BY SkuId
) A
);
Another mysql tip: using mysqldump export a table with one line one row.
mysqldump --databases YourDataBaseName --tables YourTableName --skip-extended-insert
Why do we need that? It is much easier to compare !
- Present enums as string. Modify your
StartUp.cs
, add the highlight part below:
services.AddMemoryCache().AddMvcCore().AddJsonOptions(opts =>
{
opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
})
.AddDataAnnotationsLocalization();
-
Enable XML Comments
- Manually add the two lines in PropertyGroup below to the .csproj file:
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
2. Add the options in the code below
services.AddSwaggerGen(options =>
{
options.IncludeXmlComments(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{AppDomain.CurrentDomain.FriendlyName}.xml"), true);
});
await Db.Queryable<Entity>().Where(_ => _.SampleFieldName== sampleFieldValue)
.GroupBy("AnothterFieldNameInStringFormat")
.Select<ResultModel>("AnotherFieldNameInStringFormat, Count(AnotherFieldNameInStringFormat) Total")
.ToListAsync();