2012-12-02 277 views
3

在asp.net中,我面對以下錯誤我的web應用程序開發的應用程序,
沒有強制經營者類型之間定義<> f__AnonymousType0 1[System.Collections.Generic.IEnumerable 1 clsDAL.AnsType]」和'clsDAL.AnsType'。

使用LInqToSQL從數據庫中獲取數據時會產生此錯誤。這個錯誤產生的功能如下。錯誤「威逼運營商」

public static IList<AnsType> GetAnswer(int id) 
{    
    var TempAns = GlobalClass.DBContext.tbQueAns.Where(s => s.QueId == id).Select(s => s.AnsVal).ToList(); 
    var TAns = GlobalClass.DBContext.tbQueOptions.Where(s=>s.QueId == id).Join(GlobalClass.DBContext.tbQueAns, x => x.OptionId, s => s.AnsVal, (a, b) => new { ans = a.OptionVal }); 
    List<AnsType> Ans = TAns.Cast<AnsType>().ToList(); 
    return Ans; 
} 

而且AnsType是如下...

public class AnsType 
{ 
    public string AnsVal { get; set; } 
} 

我沒有得到明白究竟是怎麼回事,我也試圖尋找這個問題的在谷歌,但我沒有得到答案。
我也想知道產生這個錯誤的原因。

回答

4

這應該工作:

var TAns = GlobalClass.DBContext 
      .tbQueOptions.Where(s=>s.QueId == id) 
      .Join(GlobalClass.DBContext.tbQueAns, 
        x => x.OptionId, 
        s => s.AnsVal, 
        (a, b) => new AnsType() { AnsVal = a.OptionVal }).ToList(); 

return TAns; 

它發生的原因,是因爲你試圖implicitly投匿名類型,你不能這樣做。

Alliteratively,你可以指定一個轉換操作符是這樣的:

 public class AnsType 
     { 
      public string AnsVal { get; set; } 
      public static implicit operator AnsType(string val) 
      { 
       AnsType t = new AnsType(); 
       t.AnsVal = val; 
       return t; 
      } 
     } 

,然後用它是這樣的:List<AnsType> Ans = TAns.Select(x=>x.ans).Cast<AnsType>().ToList();

+0

謝謝哥們其完美的工作,因爲我想.... 謝謝... .. –