我有一個項目列表,用於存儲在SQLite數據庫中的字符串本地化。我想檢索列表,並使用linq爲顯示目的創建項目字典。如果本地化的字符串不存在,那麼我想返回默認的語言字符串。Linq - 從列表中選擇項目或默認值
例如數據
Item MetaTag LanguageCode Text
1 Hello en Hello
1 Hello fr Bonjour
1 Hello de Guten Tag
1 Goodbye en Goodbye
,所以如果我想德國串,詞典應該包含
1 Hello de Guten Tag
1 Goodbye en Goodbye
所以我有以下代碼:
public interface ILocalisedItem
{
int ID { get; set; }
int ItemId { get; set; }
string MetaTag { get; set; }
string LanguageCode { get; set; }
}
public class ItemString : ILocalisedItem
{
int ID { get; set; }
int ItemId { get; set; }
string MetaTag { get; set; }
string LanguageCode { get; set; }
string Text {get; set; }
}
public static IDictionary<string, T> GetMetaDataDictionary<T>
(int ItemId, string DisplayLanguage, string DefaultLanguage)
where T : ILocalisedItem, new()
{
IEnumerable<T> metadata = GetMetaData<T>(ItemId);
ILookup<string, T> _lookup = metadata
.Where(z => (z.LanguageCode == DisplayLanguage) || (z.LanguageCode == DefaultLanguage))
.OrderBy(x => (x.LanguageCode == DisplayLanguage) ? 0 : 1)
.ToLookup(o => o.MetaTag);
return _lookup.ToDictionary(y => y.Key.ToLower(), y => y.First());
}
此代碼似乎工作,但我認爲必須有更好的方法來做到這一點。任何人都可以提供更好的解決方案。
爲什麼不從數據庫發送過濾的數據?然後,只需使用返回的任何數據庫。 – danish