选择运算
选择运算支持的方法有Where,FirstOrDefault,First,Skip,Take。他们的结果与Linq中的类似:
//复杂条件
var whereResult = context.Beans
.Where(p => p.IntNumber > 0 && p.DecimalNumber > 987D).ToList();
Console.WriteLine("RunResult:");
foreach (var item in whereResult) Console.WriteLine($"{item}");
这个查询会查出所有intNumber > 0并且DecimalNumber > 987的对象并将他们组成List。这一代码片段的输出如下:
RunResult:
{IntNumber-7,DecimalNumber-3020,DateTime-"2020-10-22 12:15:23",String-"7号字符串",Bool-"False"}
{IntNumber-8,DecimalNumber-9489,DateTime-"2020-10-22 12:15:23",String-"8号字符串",Bool-"True"}
{IntNumber-9,DecimalNumber-29809,DateTime-"2020-10-22 12:15:23",String-"9号字符串",Bool-"False"}
{IntNumber-10,DecimalNumber-93648,DateTime-"2020-10-22 12:15:23",String-"10号字符串",Bool-"True"}
{IntNumber-14,DecimalNumber-9122171,DateTime-"2020-10-22 12:15:23",String-"14号字符串",Bool-"True"}
{IntNumber-15,DecimalNumber-28658146,DateTime-"2020-10-22 12:15:23",String-"15号字符串",Bool-"False"}
{IntNumber-16,DecimalNumber-90032221,DateTime-"2020-10-22 12:15:23",String-"16号字符串",Bool-"True"}
{IntNumber-17,DecimalNumber-282844564,DateTime-"2020-10-22 12:15:23",String-"17号字符串",Bool-"False"}
{IntNumber-18,DecimalNumber-888582403,DateTime-"2020-10-22 12:15:23",String-"18号字符串",Bool-"True"}
而FirsetOrDefault和First则会返回符合条件的第一个对象。不同的是如果结果为空。First会报错。而FirstOrDefault会返回空。
//找出第一个
var firstResult = context.Beans.FirstOrDefault(p => p.DecimalNumber > 90D);
var firstResult1 = context.Beans.FirstOrDefault();
Assert.IsTrue(firstResult1?.IntNumber > 0);
Console.WriteLine("RunResult:");
Console.WriteLine($"{firstResult}");
这一代码片段的结果是:
RunResult:
{IntNumber-4,DecimalNumber-97,DateTime-"2020-10-22 12:15:23",String-"4号字符串",Bool-"True"]}
对于Skip和Take,我们通常会联合使用,表示跳过多少个后取多少个:
//跳过10个取10
var skipResult = context.JavaBeans.Skip(10).Take(10).ToList();
Console.WriteLine("RunResult:");
foreach (var item in skipResult) Console.WriteLine($"{item}");
得到的结果是后10个对象。