2013-08-23 3 views
0

Я хотел спросить, есть ли лучший способ достичь того, что я пытаюсь сделать.Entity Framework IQueryable, с 2 запросами

Мне нужно получить все записи дочернего графа, которые имеют дату, большую или равную данной дате, и первую запись с датой с малой до указанной даты.

Я нашел это решение, которое работает, но я не уверен, что это будет лучший способ.

var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
{ 
    Istc0 = a, 
    Interests = a.Interests.Where(d => d.InDat >= date) 
}); 

var qq = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
{ 
    Istc0 = a, 
    Interests = a.Interests.Where(d => d.InDat < date).OrderByDescending(d => d.InDat).Take(1) 
}); 

var xxx = q.ToList()[0].Istc0; 
xxx = qq.ToList()[0].Istc0; 

return xxx; 
+3

Похоже, что вы выполняете запрос 'q', а затем отбрасываете результаты. – SWeko

+0

Немного непонятно, что вы пытаетесь сделать здесь. Глядя на ваш код, вы просто получаете свойство «Istc0» первого результата q, а затем перезаписываете его с помощью свойства «Istc0» первого результата qq. Есть ли что-то еще, что вы хотите сделать? Свойства 'интересы' обоих запросов не используются. –

+0

Хорошо, я пытаюсь объяснить это лучше, мне нужно получить все записи в моей таблице интересов с даты в прошлом до сегодняшнего дня, но мне также нужна первая запись до этого дня. Я так делаю, и я получаю все необходимые данные, но это не кажется очень чистым способом для выполнения задания. – Raphael

ответ

1

Я не знаю, какой из них вам нужно вернуть. Наверное, уйи.

var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
    { 
     Istc0 = a, 
     Interests = a.Interests.Where(d => d.InDat >= date) 
    }).ToList(); 


var xxx = q[0].Istc0; 
var yyy = q.OrderByDescending(d => d.InDat).Take(1).SingleOrDefault().Istc0; 

Dictionary<string,decimal> result = new Dictionary<string,decimal>(); 

result.Add("all",xxx); 
result.Add("previous",yyy); 

return result; 

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

Другой способ - иметь строго типизированный объект и возвращать список этого объекта.

Наконец, вы можете определить два выходных параметра (read this). Например:

public void GetInterestRates(string listKey, out decimal currentRate, out decimal previousRate) 
{ 
    var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new 
     { 
      Istc0 = a, 
      Interests = a.Interests.Where(d => d.InDat >= date) 
     }).ToList(); 


    var currentRate = q[0].Istc0; 
    var previousRate = q.OrderByDescending(d => d.InDat).Take(1).SingleOrDefault().Istc0; 

} 

И когда вы хотите использовать это:

decimal currentRate , previousRate; 
GetInterestRates(listKey, currentRate , previousRate); 
+0

Мне нужен результат обоих запросов.первый запрос должен вернуть все процентные ставки, которые больше или равны дате, которую я передаю, а второй запрос возвращает мне первую процентную ставку, дата которой меньше даты, которую я передаю – Raphael

+0

Привет, вы можете проверить некоторые из вариантов i в моем отредактированном сообщении. –

0

Привет спасибо за ответ.

С запросом, который вы отправили, я не получаю все необходимые мне данные. Я не думаю, что могу получить то, что мне нужно, с одним запросом.

 
Interest table 
----------------- 
2013-5-16 | 1% 
2013-6-21 | 0.8% 
2013-7-12 | 0.5% 
2013-8-06 | 0.6% 

istc0 таблица содержит все мой номер ISIN и как отношения с таблицей процентных один ко многим.

Включение параметра функции - это дата. так что если я перехожу к примеру

дата = 2013-7-01

В результате мне нужно следующее:

 
Interest table 
----------------- 
2013-6-21 | 0.8% 
2013-7-12 | 0.5% 
2013-8-06 | 0.6% 

Так что в моем Форст поста первого запроса присваивается д извлекает все проценты после июля, второй запрос, присвоенный qq, получает первую процентную ставку до первого июля. Моя функция выполняет эту работу, и я получаю набор данных, которые мне нужны, но это, по-видимому, не самый чистый способ сделать это.

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