zoukankan      html  css  js  c++  java
  • 之前在开发中存在的一个关于Linq To SQL的错误认识。

    使用LINQ TO SQL是在2009年开始的,那个时候是给公司做一个自用的采购系统,初次接触这个东西,之前一直是做JAVA的,使用SSH框架,很多的时候查询语句都是拼接出来的SQL语句,而微软的LINQ TO SQL则不是这个样子的,所以那个时候在做SQL里的LINK的时候,一个字符串,我会先判断是不是为空为NULL然后在查询,导致了我的LINQ语句变成了这个样子:

     1 var matches = from t in db.tPriceConfirmInfo
    2 where
    3 (ProjectNameText.Text != "" && ProjectNameText.Text != null ? t.tProjectInfo.ProjectName.Contains(ProjectNameText.Text) : true)
    4 group t by new
    5 {
    6 t.PriceConfirmNo
    7 }
    8 into p
    9 select new
    10 {
    11 ...
    12 };

    这让我当时觉得LINQ实在是BT到了一定程度了啊,怎么会有这么BT的判断方式啊!然后找啊找也没找到好的方式。

    如今这个系统公司使用了两年多了,期间更改了很多东西,更改的时候自己对LINQ的认识也逐渐的多了起来,也学到了不少,发现其实很多时候还是自己的水平限制,对它的了解不够才写出这样的代码来。不过,这也是一个学习的过程。比如上面语句中的ProjectNameText.Text != "" && ProjectNameText.Text != null就可以更换为string.IsNullOrEmpty( ProjectNameText.Text)。

    今天在看LINQ关于预编译查询的内容。

    下面这段内容中包含了预编译,Lamabda表达式,匿名方法,我更倾向于Lamabda方式来写LINQ查询。

    private static PMSDBDataContext PMS = new PMSDBDataContext();
    private static Func<PMSDBDataContext, string, string, string, IEnumerable<PriceConfrimList>> _priceConfirmInfo;
    public static IEnumerable<PriceConfrimList> PriceConfirmInfoCollection(string ProjectName, string RequestNo, string PriceConfirmNo, out int ItemCount)
    {
    if (_priceConfirmInfo == null)
    {
    _priceConfirmInfo = CompiledQuery.Compile<PMSDBDataContext, string, string, string, IEnumerable<PriceConfrimList>>
    ((db, PName, RNo, PNo) =>
    db.tPriceConfirmInfo.Where(t => t.State == true).
    Where(t => t.tProjectInfo.ProjectName.Contains(PName)).
    Where(t => t.RequestNo.Contains(RNo)).
    Where(t => t.PriceConfirmNo.Contains(PNo)).
    Select(p => new PriceConfrimList
    {
    PriceConfirmNo = p.PriceConfirmNo,
    Url = HttpUtility.UrlEncode(p.PriceConfirmNo),
    ProjectName = p.tProjectInfo.ProjectName,
    RequestNo = p.RequestNo,
    FillDate = p.FillDate,
    PLCheck = Options.GetState(p.PLCheckState)
    }).Distinct()
    );
    }
    IEnumerable<PriceConfrimList> Result = _priceConfirmInfo.Invoke(PMS, ProjectName, RequestNo, PriceConfirmNo);
    ItemCount = Result.Count();
    return Result;
    }

    就在这之后,上面这段内容查询出来的结果集不支持绑定分页,这个具体为什么我还没仔细去看,不过当我看以前的LINQ语句和上面的预编译语句的时候我发现一个问题,就是关于Contains方法的不同的地方,于是我尝试更换了以前的LINQ查询语句,变成这样:

    var matches = from t in db.tPriceConfirmInfo
    where
    t.tProjectInfo.ProjectName.Contains(ProjectNameText.Text)
    group t by new
    {
    t.PriceConfirmNo
    }
    into p
    select new
    {
    ...
    };

    一个学习的过程而已,高手无视就行了。



    更多内容请访问我的博客:http://luacloud.com/2011/linq-to-sql-contains.html

  • 相关阅读:
    nginx解决跨域问题
    SSM整合相关试题
    SSM整合案例--用户登录
    非法用户登录拦截
    SpringMVC拦截器和数据校验
    SpringMVC文件上传
    SpringMVC异常处理
    SpringMVC方法的返回值类型和自动装配
    SpringMVC
    spring和mybatis整合
  • 原文地址:https://www.cnblogs.com/luacloud/p/2263040.html
Copyright © 2011-2022 走看看