2011-09-30 147 views
1

這裏,我寫的代碼功能,我儘快得到錯誤,我增加了行調用第二個功能是ValidCodes = GetValidCodes(bv.Variable_Id)錯誤同時呼籲從LINQ查詢

public IQueryable<BvIndexRow> GetBenefitVariableIndex(int healthPlanId) 
{ 
    var q = from bv in Db.BenefitVariables 
      where bv.Private == "N" || (bv.Private == "Y" && bv.Health_Plan_ID == healthPlanId) 
      join bao in Db.baObject on bv.Variable_Id equals bao.ba_Object_id 
      join servicetype in Db.BenefitVariableServiceTypes.Where(bvst => bvst.Key_Service_Type == "Y" && bvst.isActive == 1) 
      on bv.Variable_Id equals servicetype.Variable_Id into groupedBvst 
      where bv.isActive == 1 && bao.isActive == 1 
      from bvst in groupedBvst.DefaultIfEmpty() 
      select new BvIndexRow 
      { 
       // some code here too 
       ValidCodes = GetValidCodes(bv.Variable_Id) 
      }; 
    return q; 
} 

public string GetValidCodes(int varID) 
{ 
    // some code here 
    return "None"; 
} 
+3

你得到了什麼錯誤?你能否以更具可讀性的格式重新發布代碼,刪除與該問題無關的行? –

+0

我不知道爲什麼我得到了我的問題投票。請你們理解並給予及時的迴應。 – Rajesh

+0

@NetDev我不確定你爲什麼要這麼做,我今天已經投票了很多,並且處於我的極限,但我會盡力消除別人的莽撞。我認爲這是由於格式化(你已經修復)。你在問一個問題,該問題涉及到一個很容易被新手忽略的LINQ-to-SQL的基本部分。當然,我認爲它很有用! – Kevek

回答

2

另一張海報已經回答了原因,但沒有做什麼。爲什麼Linq-to-SQL無法將方法調用轉換爲SQL,因爲它不是SQL的一部分!這非常合理!所以一個簡單的方法來解決這個問題是:

public IQueryable<BvIndexRow> GetBenefitVariableIndex(int healthPlanId) 
{ 
    var q = (... your query ... 
     select new BvIndexRow 
     { 
     Type = (bv.Private.ToLower() == "y" ? "Private " : "Public ") + (bao.ba_system_variable_ind ? "System" : "Benefit"), 
     Class = bv.Variable_Classification, 
     ServiceType = bvst.Service_Type.Service_Type_Name ?? string.Empty, 
     LineOfBusiness = bv.LOB, 
     Status = bv.Status.ToLower() == "p" ? "Production" : "Test", 
     Name = bao.ba_object_Code, 
     Description = bao.ba_Object_Desc, 
     Id = bv.Variable_Id, 
     }).ToArray(); 

    foreach (var bvIndexRow in q) { 
     bvIndexRow.ValidCodes = GetValidCodes(bvIndexRow .Variable_Id); 
    } 

    return q; 
} 

這應該讓你想要你想!

編輯:通過由,您可能還想調用BvIndexRows列表上的.ToList()或.ToArray()。這具有造成立即評估的效果並且會阻止多重枚舉。如果你不想立即評估,你可能需要編輯你的問題來解釋爲什麼是這樣。我在上面的例子中添加了一個.ToArray(),但我也想解釋爲什麼!

2

LINQ到SQL無法解析方法在數據庫上下文中調用GetValidCodes(..)進行操作 - 一旦將結果帶回到內存中或者直接填充相應的linq到sql語句,您將不得不填充該屬性。

相關問題