[英]Linq Query not giving the expected result
在對代碼進行了相當復雜的返工后,我偶然發現了一小部分沒有給我預期結果的代碼。 以下 Linq 查詢應通過僅選擇包含特定字符串的數據來查詢主對象中包含的數據。
主列表包含大約 5500 個條目。 執行 Linq 查詢后,次要對象仍包含這 5500 個條目。 我是瞎了眼還是已經精神錯亂了? CompanyName 參數包含一個有效存在的公司。
更新:如果數據是從緩存中獲取的,則列表包含所有相關條目,只是查詢似乎沒有效果。
public List<Account> GetAccountsByValue(string CompanyName)
{
string CacheKey = "Accounts";
ObjectCache dataCache = MemoryCache.Default;
if (dataCache.Contains(CacheKey))
{
var ResultCached = (IEnumerable<Account>)dataCache.Get(CacheKey);
var ResultCached2 = from c in ResultCached
where c.Name.Contains(CompanyName)
select new
{
c.Name,
c.Street,
c.City,
c.ID
};
var temp = ResultCached2.ToList();
return temp;
}
else
{
IList<CrmAccount> Accounts = CrmServiceAgent.GetAccounts();
var ResultNoCache = from CrmAccount f in Accounts
orderby f.DisplayName
select new Account(f);
// put the data in the cache
CacheItemPolicy cacheItemPolicy = new CacheItemPolicy();
cacheItemPolicy.AbsoluteExpiration = DateTime.Now.AddHours(4.0);
dataCache.Add(CacheKey, ResultNoCache, cacheItemPolicy);
return ResultNoCache.ToList();
}
}
查詢的數據列表如下所示(在 WCF 測試客戶端中)
一切正常,只是查詢部分不起作用,這意味着再次返回所有條目,而不是僅返回包含查詢參數的條目。
更新:實際上我得到一個空引用異常,可能是因為前幾個條目的名稱屬性為空....
現在拋出錯誤:
var ResultCached3 = ResultCached.Where(c => c.Name.Contains(CompanyName)).ToList();
我現在已經解決了整個問題。 從數據庫查詢的數據現在不再包含任何空值。 問題是,強制字段只在前端檢查而不是在數據庫級別檢查。 所以通常是強制性的數據被導入為空值
所以現在在列表中我只有“有效”數據,現在 linq 查詢可以正常工作。
謝謝大家的提示和建議!
親切的問候桑德羅
var ResultCached2 = (from c in ResultCached
where c.Name.Contains(CompanyName)
select new
{
c.Name,
c.Street,
c.City,
c.ID
}).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.