1
考虑下面的SQLite表创建不当的申请加入
CREATE TABLE `ComponentNameLookup` (
`Id` INTEGER PRIMARY KEY AUTOINCREMENT,
`ComponentId` INTEGER NOT NULL,
`ComponentName` TEXT NOT NULL,
`Culture` TEXT
);
insert into ComponentNameLookup
(Id,ComponentId,ComponentName,Culture)
values
(1, 0, 'Logger', NULL ),
(2, 1, 'Transport', NULL ),
(3, 2, 'Error Handler', NULL ),
(4, 3, 'Persistance', NULL ),
(5, 0, 'Registrador', 'es-ES'),
(6, 1, 'Transporte', 'es' ),
(7, 2, 'Controlador de errores', 'es-ES'),
(8, 3, 'Persistencia', 'es-ES'),
(9, 1, 'Транспорт', 'ru' ),
(10, 2, 'Обработчик ошибок', 'ru-RU')
和LINQ查询
void Main()
{
string cultureString = Thread.CurrentThread.CurrentCulture.Name;
string languageName = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;
cultureString = "es-ES";
languageName = "es";
var localized = context.ComponentNameLookups
.Where(x => x.Culture == cultureString || x.Culture == languageName || x.Culture == null)
.GroupBy(c => c.ComponentId)
.Select(g => new KeyValue<int?, string>{
Key = g.Key,
Value = g
.OrderByDescending(x => x.Culture.Length)
.Select(c => c.ComponentName)
.FirstOrDefault(),
})
;
localized.ToArray();
}
public class KeyValue<T1, T2> {
public T1 Key;
public T2 Value;
}
我得到的错误
System.Data.Entity.Core.EntityCommandCompilationException :准备命令定义时发生错误。详情请参阅内部例外。 ---> System.NotSupportedException:不支持APPLY连接
这样的事情不应该是一个APPLY JOIN。有没有其他方法可以使用LINQ来执行此查询?