首先想到:
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.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/