where可以使用foreach进行过滤数据。过滤数据方法用此图做示例:
static void Main(string[] args)
{
List<Person>personL = new List<Person>()
personL.Add(new Person("wtq", "男", "13616009873", 23))
personL.Add(new Person("wta", "女", "13616009871", 24))
personL.Add(new Person("wtb", "男", "13616009872", 26))
personL.Add(new Person("wtc", "男", "13616009873", 25))
personL.Add(new Person("wtd", "男", "13616009874", 27))
personL.Add(new Person("wte", "女", "13616009875", 28))
personL.Add(new Person("wtf", "男", "13616009876", 29))
personL.Add(new Person("wtg", "男", "13616009877", 30))
personL.Add(new Person("wth", "女", "13616009878", 23))
var pr = from n in personL
where n.Age == 23
select new { myname = n.Name, mysex = n.Sex }
foreach (var item in pr)
{
Console.WriteLine(item.myname+" "+item.mysex)
}
Console.ReadLine()
}
从该表看data字段应是字符串型,无法直接使用数学函数,用sql不可能直接检查判断是否数值型内容。建议编程解决,写个循环逐条记录判断,取data字段值后用一个todouble,成功即为数值型记录。
left join中如果使用了on, 如果on条件为true, 则将过滤掉这部分数据后(如右表user.sex=‘男’), 再与左表进行关联. on条件是在生成临时表时使用的条件, 无论如果on条件为ture, 或是false, 都将会返回左表中所有的记录.而where条件则是在临时表生成后(包括on中过滤部分数据之后), 再对临时表的结果集进行再过滤. 因此时其为一个完整的结果集, 无左表或右表之分, 当条件不为真时, 不符合的结果期就将全部被过滤掉.
having的执行次序, 会排在 on 和 where条件 之后. 因为次序的问题,其总是最后被执行.
开发过程中的最优实践:
这几类过滤条件中, on是先把不符合条件的记录过滤后才进行统计, 在某些字段可以过滤掉相当多数据的应用场景中, 可以减少中间计算所需要处理的数据量, 对sql的优化也最明显.
只有两张以上表的关联场景中,才会用到on, 而一张表的查询, 只有where与having.
执行完where字句的过滤功能后, 才能得到过滤后的数据集, 过滤数据后
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)