使用左连接的sql到linq

时间:2013-11-21 08:15:41

标签: linq entity-framework join

我在SQL中创建了一个请求并将它们放在数据集中。显然当数据非常庞大时它会挂起。所以我使用实体。

我原来的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

如何从这个sql中将它翻译成linq:

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

1 个答案:

答案 0 :(得分:0)

  1. 我看不出有任何理由在Get_OrdreEntity函数中进行异常处理。它应该以它正常工作的方式编码。调试它。无论如何,你什么都不做。
  2. 我在这个函数中查询和过滤数据并希望得到结果,最好在此函数的结果中返回集合而不是查询,以消除性能和副作用。即在任何你想要的地方返回IEnumerable,ICollection,IList。
  3. 很容易找到大量的Linq加入示例,只需使用Google。 Here is所有你需要的。