2012-01-12 5 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

Поскольку вы возвращаете кредито, вы должны использовать конкретный тип вместо анонимного типа. – jrummell

+0

Как использовать конкретный тип, если мой запрос использует тип «acreditados» и «creditos»? –

+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())

+0

Спасибо за это, но я до сих пор не знаю, как использовать результат. –

+0

wow, не знаю, я мог бы это сделать. Спасибо за вашу помощь, только один вопрос, могу ли я использовать struct вместо класса? каково было бы различие? –

+0

в основном это было бы одинаково, но только с этими отличиями http://msdn.microsoft.com/en-us/library/aa664471(v=vs.71).aspx, если вы не знаете о классе и структурах diferrences. –

2

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

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

Спасибо, Joachim, довольно хорошее объяснение –

Смежные вопросы