我是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关系连接两个表,我错了吗?
由于
答案 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();
}