I want to OrderBy
a field using Linq and SQLite. Table:
OriginalWord |
---|
Test1 |
eat |
test2 |
I want to order by OriginalWord
:
await Database.Table<Word>()
.Where(i => i.DictionaryId == id)
.OrderBy(w => w.OriginalWord)
.ToListAsync();
Order in SQLite is case sensitive. I found a solution:
internal sealed class NameComparer : IComparer<string> {
private static readonly NameComparer DefaultInstance = new NameComparer();
static NameComparer() { }
private NameComparer() { }
public static NameComparer Default {
get { return DefaultInstance; }
}
public int Compare(string x, string y) {
int length = Math.Min(x.Length, y.Length);
for (int i = 0; i < length; ++i) {
if (x[i] == y[i]) continue;
if (x[i] == '-') return 1;
if (y[i] == '-') return -1;
return x[i].CompareTo(y[i]);
}
return x.Length - y.Length;
}
}
var sorted = names.OrderBy(name => name, NameComparer.Default).ToList();
This is not working because OrderByhas
has only 1 parameter:
I'm using NET7 (MAUI) and SQLite.