首先想到:结果不正确!
var data0 = db.T_Plants2; //这里加.AsQueryable()if (locationType == 1){.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 == 1){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.productsselect 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.Usersselect q.Name
}
else
select new
{Owner = from r in db.ExternalUsersselect r.Name
}
//案例三
private string getValue(float price)
{if(price >0)return "debit";return "credit";
}select new {p.PriceID, Type = getValue(p.Price)};
三、拓展
多条件查询,自己构造 filter条件

例如:
//对某一字段的查询,查询关键字是两个或两个以上的字符串,但查出来的相邻两个关键字的间距必须在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_BookPageDetailsselect item;foreach(var filter in filters)query = query.Where(filter);query.Take(10).Dump();
}
多条件查询通用方法,重构 where、orderby 方法
https://www.cnblogs.com/hao-1234-1234/p/11271840.html
参考文章
http://www.it1352.com/401595.html
https://stackoverflow.com/questions/443044/if-else-in-linq
https://q.cnblogs.com/q/73479/