Получить результат из запроса Linq-to-SQL - PullRequest
0 голосов
/ 12 января 2012

Я новичок в 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;
}

Этот запрос всегда возвращает одну строку из моей базы данных.Затем я хочу использовать результат этого запроса и показать его в разных текстовых полях.В другом классе я создал метод для печати этого результата, как я упоминал выше.

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 ]

3 голосов
/ 12 января 2012

, если вы ожидаете только один результат, используйте метод 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 () и все.

Затем определите вашу функцию для возврата типа CreditoSingle()) или List<Credito>ToList())

2 голосов
/ 12 января 2012

Вы возвращаете «анонимный» тип данных в IQueryable, что не очень хорошая привычка, поскольку вы не можете получить к нему доступ вне метода, в котором он был создан.

Попробуйте объявить структуру, которая может содержать ваши данные, и вместо этого вернуть IQueryable или даже - поскольку вы просто хотите получить одно значение - вызовите Single () для IQueryable, чтобы получить 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...