2013-11-21 10 views
0

Я создал запрос в SQL и поместил их в набор данных. видимо, он висит, когда данные очень огромные. поэтому я использую Entity.sql to linq with left join

мой оригинальный SQL, как это:

SELECT NO_ORDRE,ORDRE.CODE_DEST as CODE_DEST,REF_EXPED,ORDRE.MODAL_MODE,RS_NOM,ADRESSE,TEL,VILLE, 
ORDRE.NBR_COLIS,ORDRE.POID,DATE_CREE,DATE_CLOTUR,STATUT_ORDRE,ORDRE.TRANSPORTEUR,ORDRE.LIB_TOURNE, 
ORDRE.DATE_CLOTUR_REEL,ORDRE.OBS,AUTRE_REF, 
ORDRE.CODE_CLIENT+'_'+CAST(NOID as VARCHAR(50))+'_'+SUBSTRING(NO_ORDRE_CUMMUL, 0, CHARINDEX('_', NO_ORDRE_CUMMUL + '_')) as NOLV 
FROM ORDRE 
LEFT OUTER JOIN LETTRE_VOIT_FINAL 
ON charindex('_'+cast(ORDRE.NO_ORDRE as varchar(255))+'_', '_'+LETTRE_VOIT_FINAL.NO_ORDRE_CUMMUL+'_') > 0 

WHERE DATE_CREE BETWEEN @DATE_CREE_DEB AND @DATE_CREE_FIN 
ORDER BY NO_ORDRE DESC 

и я попробовать свои LINQ, как это:

public IQueryable<ORDRE> Get_OrdreEntity(DateTime datedeb, DateTime datefin) 
     { 
      try 
      { 
       IQueryable<ORDRE> LesListe; 
       Soft8Exp_ClientEntities oEntite_T = new Soft8Exp_ClientEntities();    

       var query = from o in oEntite_T.ORDRE 
          where o.DATE_CREE >= datedeb && o.DATE_CREE <= datefin        
          select o; 

       LesListe = query; 

       return LesListe; 
      } 
      catch (Exception excThrown) 
      { 
       throw new Exception("Err_02", excThrown); 
      } 
     } 

это работает хорошо, но я не знаю, как сделать из этого присоединиться к SQL :

LEFT OUTER JOIN LETTRE_VOIT_FINAL 
ON charindex('_'+cast(ORDRE.NO_ORDRE as varchar(255))+'_', '_'+LETTRE_VOIT_FINAL.NO_ORDRE_CUMMUL+'_') > 0 

и как я могу перевести его на LINQ от этого SQL:

ORDRE.CODE_CLIENT+'_'+CAST(NOID as VARCHAR(50))+'_'+SUBSTRING(NO_ORDRE_CUMMUL, 0, CHARINDEX('_', NO_ORDRE_CUMMUL + '_')) as NOLV 
+0

Возможно, если ваши данные будут огромными, вы можете использовать представление? Это принесет больше преимуществ, чем использование структуры? –

ответ

0
  1. Я не вижу никакой причины иметь обработку исключений в функции Get_OrdreEntity. Он должен быть закодирован так, как он работает. Отлаживайте его. В любом случае вы ничего не делаете в уловке.
  2. Я запрашиваю и фильтрую данные в этой функции и хочу получать результаты, это хорошая идея вернуть коллекцию вместо запроса в результате этой функции, чтобы исключить производительность и побочные эффекты. То есть return IEnumerable, ICollection, IList, где вы хотите.
  3. Легко найти тонну примеров присоединения Linq, просто используйте Google. Here is все, что вам нужно.