2013-06-24 29 views
0

我在我的課上有一個linq查詢。當我嘗試返回一個或另一個結果時,編譯器會拋出一個與「匿名類型」相關的轉換類型錯誤,我發現它沒有解決方案。linq表達式(和匿名類型)的結果錯誤

這是我的代碼:

public static string VerificaExame(string desc) 
{ 
    var model = new ExameContext(); 
    var res = model.DbExame.Where(exame => exame.Descricao.Trim() == desc.Trim()).Select(exame => new { Id = exame.Id, Codigo = exame.Codigo }); 
    if (res == null) 
     res = model.DbExame.Where(exame => exame.Codigo.Trim() == desc.Trim()).Select(exame => new { Id = exame.Id, Descricao = exame.Descricao }); 
    var ret = res.FirstOrDefault(); 
    return JsonConvert.SerializeObject(ret); 
} 

和錯誤消息:

無效的匿名類型成員聲明。匿名類型成員必須聲明爲成員分配,簡單名稱或成員訪問權限。

此錯誤是指涉:

res = model.DbExame.Where(exame => exame.Codigo.Trim() == desc.Trim()).Select(exame => new { Id = exame.Id, Descricao = exame.Descricao }); 
+0

是不是你的資源變量每次不同的對象返回? –

+0

真的,res以前定義的成員不可以轉換或只讀。 – GustavoAdolfo

回答

1

使用不同的變量(不使用res

var res = model.DbExame.Where(exame => exame.Descricao.Trim() == desc.Trim()).Select(exame => new { Id = exame.Id, Codigo = exame.Codigo }); 
//^ Now res is of a specific type (ie: IEnumerable<Anonymous1>) 
if (res == null) 
    var res2 = model.DbExame.Where(exame => exame.Codigo.Trim() == desc.Trim()).Select(exame => new { Id = exame.Id, Descricao = exame.Descricao }); 
    //^ you cant affect res2 to res because they are of different type 

if (res == null)資源永遠不會爲空,可能是你想要的if (!res.Any())看看res是否有物品。


這是你應該做的:

public static string VerificaExame(string desc) 
{ 
    var model = new ExameContext(); 
    object res = (object)model.DbExame.Where(exame => exame.Descricao.Trim() == desc.Trim()) 
           .Select(exame => new { Id = exame.Id, Codigo = exame.Codigo }) 
           .FirstOrDefault() 
     ?? 
     (object)model.DbExame.Where(exame => exame.Codigo.Trim() == desc.Trim()) 
         .Select(exame => new { Id = exame.Id, Descricao = exame.Descricao }) 
         .FirstOrDefault(); 

    if (res != null) 
     return JsonConvert.SerializeObject(res); 
    return JsonConvert.SerializeObject("");//Or throw an exception 
} 
+0

是的,我甚至想過,但我認爲這可能是另一種方式... 謝謝@艾哈邁德KRAIEM – GustavoAdolfo

+0

哇!大!謝謝你,朋友。 ;) – GustavoAdolfo

+0

Oh nooooo :( 運算符'??'不能用於類型'AnonymousType#1'和'AnonymousType#2'的操作數' – GustavoAdolfo