2012-01-12 47 views
0

我是Linq-to-SQL的新手,我不知道如何使用Linq中查詢的結果。我使用返回兩個表的數據的函數:從Linq-to-SQL查詢中獲取結果

public IQueryable RegresaDatosCredito(int idC) 
{ 
    var credito = from a in context.acreditados 
       where a.creditos.IDCredito == idC 
       select new 
       { 
        Monto = a.Cantidad, 
        Tasa = a.creditos.TasaInteres, 
        Plazo = a.creditos.Plazo, 
        Periodo = a.creditos.Periodo, 
        Producto = a.creditos.Producto, 
        Expediente = a.creditos.Expediente 
       }; 

    return credito; 
} 

此查詢將始終從我的數據庫返回一行。然後我想使用這個查詢的結果並在不同的文本框中顯示。在其他類中,我創建了一個方法來打印如上所述的結果。

private void SomeMethod() 
{ 
    try 
    { 
     var credito = operaciones.RegresaDatosCredito(idCred); 
     text_MontoC.Text = credito.Monto; 
     text_TasaC.Text = credito.Tasa; 
     text_PlazoC.Text = credito.Plazo; 
     text_PeriodoC.Text = credito.Periodo; 
     text_ProductoC.Text = credito.Producto; 
     text_ExpedienteC.Text = credito.Expediente; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

但我不能訪問結果做這樣的事情credito. ???,什麼是做了正確的方法是什麼?

RegresaDatosCredito我返回一個IQueryable數據類型,因爲在查詢我加入兩個表使用FK關係,我錯了嗎?

感謝

+2

由於您要返回credito,您應該使用具體類型而不是匿名類型。 – jrummell 2012-01-12 19:21:07

+0

如果我的查詢使用'acreditados'和'creditos'類型,我該如何使用具體類型? – 2012-01-12 19:23:12

+0

我正在編輯我的問題說, – 2012-01-12 19:23:14

回答

3

如果你期待只有一個結果使用Single方法。

var credito = (from a in context.acreditados 
          where a.creditos.IDCredito == idC 
          select new 
          { 
           Monto = a.Cantidad, 
           Tasa = a.creditos.TasaInteres, 
           Plazo = a.creditos.Plazo, 
           Periodo = a.creditos.Periodo, 
           Producto = a.creditos.Producto, 
           Expediente = a.creditos.Expediente 
          }).Single(); 

你也應該分析你的結果,以一個具體的類型,而不是一個anounymus型

比方說你創建一個類

public class Credito 
{ 
    public decimal Monto{get;set;} 
public decimal Tasa{get;set;} 
public decimal Plazo{get;set;} 
public string Periodo{get;set;} 
public string Producto{get;set;} 
public string Expediente{get;set;} 
} 

,然後你可以使用它像這樣

var credito = (from a in context.acreditados 
          where a.creditos.IDCredito == idC 
          select new Credito 
          { 
           Monto = a.Cantidad, 
           Tasa = a.creditos.TasaInteres, 
           Plazo = a.creditos.Plazo, 
           Periodo = a.creditos.Periodo, 
           Producto = a.creditos.Producto, 
           Expediente = a.creditos.Expediente 
          }).Single(); 

如果你想返回其中的各種使用,而不是Single,toList()和多數民衆贊成它。

然後定義你的函數返回一個Credito型(Single())或List<Credito>(與ToList()

+0

謝謝你,但我仍然不知道如何使用結果 – 2012-01-12 19:25:14

+0

哇,不知道我可以做到這一點。感謝您的幫助,只有一個問題,我可以使用結構而不是類嗎?什麼是差異? – 2012-01-12 19:43:47

+0

基本上它會是相同的,但只是與這種差異http://msdn.microsoft.com/en-us/library/aa664471(v=vs.71).aspx,如果你不知道類和結構diferrences。 – 2012-01-12 22:48:41

2

你在IQueryable的返回一個「匿名」數據類型,不是一個好習慣,因爲你不能訪問它在創建它的方法之外。

嘗試聲明一個可以容納數據並返回IQueryable結構的結構,而不是 - 因爲您只需要一個值 - 調用IQueryable上的Single()來獲得CreditoStruct並返回該結構。

public CreditoStruct RegresaDatosCredito(int idC) 
{ 
    return (from a in context.acreditados 
          where a.creditos.IDCredito == idC 
          select new CreditoStruct 
          { 
           Monto = a.Cantidad, 
           Tasa = a.creditos.TasaInteres, 
           Plazo = a.creditos.Plazo, 
           Periodo = a.creditos.Periodo, 
           Producto = a.creditos.Producto, 
           Expediente = a.creditos.Expediente 
          }).Single(); 
} 
+0

感謝Joachim,很好的解釋 – 2012-01-12 19:46:10