从Linq-to-SQL查询中获取结果

时间:2012-01-12 19:17:36

标签: c# linq-to-sql

我是Linq-to-SQL的新手,我不知道在Linq中使用查询结果的正确方法是什么。我使用一个函数返回两个表的数据:

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;
}

此查询将始终从我的数据库返回一行。然后我想使用此查询的结果并在不同的textBoxes中显示它。在其他类中,我创建了一个方法来打印这个结果,如上所述。

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 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

你在IQueryable中返回一个“匿名”数据类型,这不是一个好习惯,因为你无法在创建它的方法之外访问它。

尝试声明一个可以保存数据的结构并返回IQueryable&lt; CreditoStruct&gt;相反,甚至 - 因为你只想要一个值 - 在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();
}