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)
上面两种写法是一样的 ,拉姆达表达式也是一种委托, 但引用的是匿名方法
随机推荐
- C语言 按位异或实现加法
/* C语言 按位异或实现加法 */ #include <stdio.h> #include <stdlib.h> #include <string.h> void ...
- django web问题
django生命周期 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. ...
- xcode简单教程
1.使用Xcode软件.Xcode是一个苹果系统上的集成开发环境(IDE),就是说用Xcode就能编写C语言程序,并编译运行.也能开发ios程序等,是一种软件.在windows上类似这种能编c语言的还 ...
- springboot redis 示例代码
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- GO语言 文件操作实例
package main import ( "bufio" "fmt" "io/ioutil" "os" ) func ...
- [Mobi] cordova requirements,Exception in thread "main" java.lang.NoClassDefFoundError
Cordova App Preparation https://quasar.dev/quasar-cli/developing-cordova-apps/preparation $ cordova ...
- 华为交换机trunk端口更改access提示:Error: Please renew the default configurations.
现象: 华为交换机接口由原来 trunk 接口更改 access 提示 Error: Please renew the default configurations. 解决方法: 在交换机视图模式下, ...
- (转)mysql使用Navicat 导出和导入数据库
mysql使用Navicat 导出和导入数据库 ps:在导入本地数据库的时候,要先建立相同的数据库,然后再运行sql文件,即可导入相应的数据库
- linux下的短延迟
nanosleep,sleephttps://www.jianshu.com/p/42abcc2c9e50
- 在ensp上的动态NAT的配置
原理 实验模拟 搭建实验拓扑 相关参数 配置静态NAT ,一对一映射 首先设置静态路由,使路由器能够访问 我们ping一下抓一下包 发现我们出去的包已经封装成为了另外一个ip 配置动态NAT ,一对一 ...