EF 拉姆达 linq if else (整理)
首先想到:
var data0 = db.T_Plants2; //这里加.AsQueryable()
if (locationType == )
{
.Where(d => d.NaturalEcosystem == true);
}
else
{
.Where(d => d.BuiltUpArea == true);
}
.Select(d => new
{
AnimalID = d.PlantID,
Species = d.Species,
}).ToList();
然而以上想法的结果是不正确的!
正确方式:
一、纳姆达方式
var data0 = db.T_Plants2.AsQueryable(); //这里加.AsQueryable()
if (locationType == )
{
data0= data0.Where(d => d.NaturalEcosystem == true);
}
else
{
data0 = data0.Where(d => d.BuiltUpArea == true);
}
var data2= data0.Select(d => new
{
AnimalID = d.PlantID,
Species = d.Species,
}).ToList();// 这里Iqueryable 无法转化为list必须用新对象data2接收;
三元表达式:
//var data2 = db.T_Plants2
// .Where(d=> locationType == 1 ? d.NaturalEcosystem == true : d.BuiltUpArea == true)
// .Select(d => new
//{
// AnimalID = d.PlantID,
// Species = d.Species,
// Genus = d.Genus,
// Family = d.Family
//}).ToList();
二、Linq方式
//案例一
from p in db.products
select new
{
Owner = (p.price > 0 ?
from q in db.Users select q.Name :
from r in db.ExternalUsers select r.Name)
}
//案例二
from p in db.products
if p.price>0
select new
{
Owner=from q in db.Users
select q.Name
}
else
select new
{
Owner = from r in db.ExternalUsers
select r.Name
}
//案例三
private string getValue(float price)
{
if(price >0)
return "debit";
return "credit";
}
select new {p.PriceID, Type = getValue(p.Price)};
三、拓展
简单版:
//对某一字段的查询,查询关键字是两个或两个以上的字符串,但查出来的相邻两个关键字的间距必须在20个字符以内
void Main()
{
var keys = new List<string>();
keys.Add("女子");
keys.Add("须发");
// keys.Add("如男子"); var filters = new List<System.Linq.Expressions.Expression<Func<LINQPad.User.CM_BookPageDetail, bool>>>();
foreach(var key in keys)
filters.Add(item=>item.Content.Contains(key));
for(var i=0;i<keys.Count ;i++)
{
if(i>0)
{
var lastKey = keys[i-1];
var currentKey = keys[i];
filters.Add(item=> item.Content.IndexOf(currentKey) - item.Content.IndexOf(lastKey) < 20);
}
} var query = from item in CM_BookPageDetails
select item; foreach(var filter in filters)
query = query.Where(filter); query.Take(10).Dump();
}
复杂应用:重构 where、orderby 方法、建立filter模型
https://www.cnblogs.com/hao-1234-1234/p/9647322.html#4225885
参考文章
http://www.it1352.com/401595.html
https://stackoverflow.com/questions/443044/if-else-in-linq
https://q.cnblogs.com/q/73479/
EF 拉姆达 linq if else (整理)的更多相关文章
- EF 拉姆达 linq 帮助类
(这个类是很早以前在网上找的,忘记出处请原谅.) 一.基本用法 [Route("List")] public ApiResult GetList(int page, int lim ...
- EF 拉姆达 动态拼接查询语句
EF 动态拼接查询语句 using System; using System.Collections.Generic; using System.IO; using System.Linq; usin ...
- SqlSugar常用查询实例-拉姆达表达式
SqlSugar支持拉姆达表达式查询,匿名对象参数等,相对还是比较方便好用的. 一.查询列表: //查询列表 SqlSugarClient db = SugarContext.GetInstance( ...
- 如何用拉姆达表达式(Lambda Expressions) 书写左链接查询
在C#中,如果要实现两个列表的左链接查询,我们的一般用法就是用的linq表达式就是 List<Pet> pets = }, }, } }; List<Pet2> pets2 = ...
- C# 匿名方法和拉姆达表达式
有时候,我们需要封装一组数据,只有数据,没有方法,并且只用于当前程序,不需要在项目间重用,这时候,如果是传统的使用类来封装的话,大概会是下面这种样子: internal class SomeData ...
- (转)拉姆达表达式(Lambda Expressions) =>写法的涵义
lambdaclass编译器 让我们先看一个简单的拉姆达表达式: x=>x/2 这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值. 通过这个拉姆达表达式,我们可以看到: 这 ...
- C#进阶之路(四):拉姆达
对于拉姆达,许多文章都讲过原理及如何使用,所以这篇文章我主要是摘录我学习过的文字,总结下我自己的学习心得. 什么是拉姆达表达式 "Lambda表达式"是一个匿名函数,是一种高效的类 ...
- C#拉姆达(=>)表达式
前言: 之前小猪曾经分享过自己对C#委托的一点理解 其实在使用委托的过程中我们会大量的使用拉姆达(=>)表达式 介绍: "Lambda表达式"是一个匿名函数,是一种高效的类似 ...
- 拉姆达表达式(Lambda Expressions)
上面两种写法是一样的 ,拉姆达表达式也是一种委托, 但引用的是匿名方法
随机推荐
- SpringMVC 事件监听 ApplicationListener
1. 实现 ApplicationListener<T> 接口(T为监听类型,稍后会列出具体可监听事件) 2. 将该自定义监听类,注册为Spring容器组件.(即将该类注入Spring容器 ...
- Mysql 查询一个月当前时间一个月之前的数据
sql: AND date_format(createDTM, MONTH),'%Y-%m-%d')
- GoldenGate 19.1 发布
GoldenGate 19.1 新特性 For the Oracle Database ➢ Oracle Database 19c Support 支持从Oracle DB 19c抽取和投递数据,包括 ...
- [Golang] http.Post导致goroutine泄漏
记录一个用http.Post的问题 if _, err := http.Post("http://127.0.0.1:8080", "", nil); nil ...
- Django框架 + Djiango安装 + First Djiango + 常用命令
一.Django框架 MVC框架和MTV框架 参考:https://www.cnblogs.com/taosiyu/p/11260016.html MVC,全名是Model View Controll ...
- 微信小程序tabBar底部导航 不显示问题解析
2019年十月八号 转藏: 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/wy_Blo ...
- Eclipse使用Working Set
当Eclipse中创建了太多的project,太多了,看的眼花缭乱,不好管理,也不想更换工作空间,Eclipse中 Java Working Set 工作集,可以将这些project分组,就像文件夹分 ...
- 【CUDA开发-并行计算】NVIDIA深度学习应用之五大杀器
来自吉浦迅科技 整理发布 http://mp.weixin.qq.com/s?__biz=MjM5NTE3Nzk4MQ==&mid=2651231163&idx=1&sn=d4 ...
- 2017ACM/ICPC广西邀请赛 Color it
Color it Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Tota ...
- Ubuntu下好用的pdf工具
安装okular sudo apt-get install okular 汉化 sudo apt-get install kde-l10n-zhcn 然后打开PDF文件时,右键选择打开方式选择okul ...