感受一下.net中 lambda与 linq 的不同

Posted hongwei918

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了感受一下.net中 lambda与 linq 的不同相关的知识,希望对你有一定的参考价值。

lambda:

          ids.Add(
                    _hahahacontext
                    .hahahamodel
                    .FirstOrDefault(
                        a =>
                        a.name == "张宏伟" 
                        && a.age== 18
                        )
                    .id
                    .ToString()
                    );

 

linq:

        ids.Add((
                    from r in _hahahacontext.hahahamodel
                    where (r.name == "张宏伟"&& r.age == 18)
                    select r.id
                    ).FirstOrDefault()
                    .ToString()
                    );  

 

发现木有,linq 后面还是用了 lambda,我没找到linq 中类似取 top1 的方法, 功能上感觉linq要少一些,但是涉及到多表联查的时候,那真的是linq看起来更清晰,而lambda的话可能会把你搞乱。

比如:(这是纯 lambda,经测试是正确的联查 )

viewModel.fields = new SelectList(
                _hahahacontext
                .hahahamodel1
                .Where(
                    a => _hahahacontext
                    .hahahamodel2
                    .Where(            //  过滤和联查都是放到一起的,容易搞乱
                        b =>
                            a.REF_ENUMID == "-5136816235353979"
                            && b.REF_ENUMID == "-5136816235353979"
                            && a.STATE == "1"
                            && a.PARENT_ID == b.ID     //表关联
                            && b.SHOWVALUE != "欧洲"
                        )
                    .Any()
                    )
                .Select(a => a.SHOWVALUE)
                .ToArray()
                .Prepend("")
                .Distinct()
                .ToList()
                .OrderBy(a => a.ToString()));

但是,linq 中可以用“ join ” 来联查,如同sql语句一样。不举例,自己看书。

 

以上是关于感受一下.net中 lambda与 linq 的不同的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 控制器不会从 LINQ lambda 捕获异常

Linq之Lambda表达式

Lambda(Linq)

lambda与函数式

如何通过 Lambda 或 LINQ 从列表中获取不同的实例

点标记(lambda表达式+linq查询标记符)与linq语句(查询表达式)