我有一个linq查询,我将返回一个Dictionary<int, string>
。我有一个重载的缓存方法,我已经创建了这个方法,它会将Dictionary<T,T>
项目作为参数之一。我在这门课有其他一些方法,其中List<T>
和T[]
没有问题。但是这一个方法,拒绝用线程主题的错误信息进行编译。无法从使用情况推断方法的类型参数。尝试明确指定类型参数
这是我的缓存类代码:
public static bool AddItemToCache<T>(string key, Dictionary<T, T> cacheItem, DateTime dt)
{
if (!IsCached(key))
{
System.Web.HttpRuntime.Cache.Insert(key, cacheItem, null, dt, TimeSpan.Zero);
return IsCached(key);
}
return true;
}
public static bool AddItemToCache<T>(string key, Dictionary<T, T> cacheItem, TimeSpan ts)
{
if (!IsCached(key))
{
System.Web.HttpRuntime.Cache.Insert(key, cacheItem, null, Cache.NoAbsoluteExpiration, ts);
return IsCached(key);
}
return true;
}
,这是无法编译LINQ查询:
private Dictionary<int, string> GetCriteriaOptions()
{
Dictionary<int, string> criteria = new Dictionary<int, string>();
string cacheItem = "NF_OutcomeCriteria";
if (DataCaching.IsCached(cacheItem))
{
criteria = (Dictionary<int, string>)DataCaching.GetItemFromCache(cacheItem);
}
else
{
Common config = new Common();
int cacheDays = int.Parse(config.GetItemFromConfig("CacheDays"));
using (var db = new NemoForceEntities())
{
criteria = (from c in db.OutcomeCriterias
where c.Visible
orderby c.SortOrder ascending
select new
{
c.OutcomeCriteriaID,
c.OutcomeCriteriaName
}).ToDictionary(c => c.OutcomeCriteriaID, c => c.OutcomeCriteriaName);
if ((criteria != null) && (criteria.Any()))
{
bool isCached = DataCaching.AddItemToCache(cacheItem, criteria, DateTime.Now.AddDays(cacheDays));
if (!isCached)
{
ApplicationErrorHandler.LogException(new ApplicationException("Unable to cache outcome criteria"),
"GetCriteriaOptions()", null, ErrorLevel.NonCritical);
}
}
}
}
return criteria;
}
这行=的isCached ..... DataCaching我得到的错误。我试过把它转换成字典(Dictionary<int, string>
),做一个.ToDictionary()
,但没有任何效果。
任何人有任何想法?
“OutcomeCriteriaID”和“OutcomeCriteriaName”的类型是什么?他们需要是相同的呼叫是有效的。 – Lee 2014-10-20 18:31:24