obase社区Obase开发者QQ群:962698871
obase

欢迎查阅
OBASE帮助文档

Obase增加了对关联引用的投影支持,这里使用之前快速入门中使用过的班级和学生间的关系作为示例。之前已经演示过对关联引用使用单参数的Select和SelectMany了,这里快速复习一下: 对于多重性为0,1的关联,可以使用指向关联引用的表达式作为参数传入Select最后ToList,得到的结果是关联引用的集合;对于多重性为0,*的关联,可以使用指向关联引用的表达式作为参数传入Select或者SelectMany最后ToList,得到的结果是关联引用的集合的集合或者关联引用的集合。 接下来我们将介绍几个其他的投影方法,首先我们先引入一个常见的简单类,在使用模型返回Json 等格式时,序列化时经常要去掉引用对象,这个类就是模拟的这种情况:

/// <summary>
///     简单Stu类 符合Json命名标准
/// </summary>
public class SimpleStu
{
    /// <summary>
    ///     ID
    /// </summary>
    public long Id { get; set; }

    /// <summary>
    ///     名字
    /// </summary>
    public string StudentName { get; set; }
}

我们把学生投影成简单的Stu对象:

 //投影成其他对象
var stu3 = context.Students.Select(s => new SimpleStu {StudentName = s.Name, Id = s.StudentId})
    .Where(p => p.StudentName != "").ToList();

这里得到的结果就是一个SimpleStu对象集合。当然有些时候我们并不想定义一个类来表示这种简单对象,因为很多时候创建一个匿名对象更容易,那么我们也可以这样投影:

var stu2 = context.Students.Select(s => new {name = s.Name, id = s.StudentId}).Where(p => p.name != "")
                .ToList();

这里得到的就是一个匿名对象。 对于一对多的情况,SelectMany则支持更多的投影方式:

//一对多 SelectMany至关联引用 并使用本集合和投影后集合构造匿名对象
var stu6 = context.Classes.SelectMany(p => p.Students, (_, s) => new {name = s.Name, Id = s.StudentId})
    .ToList();

这里第二参数是两个参数的表达式,第一个参数是投影源,即Class;第二个参数是Student即关联引用,这里我构造匿名对象时没有使用Class中的属性,所以使用 " _ " 来表示未使用的参数。得到的结果是一个匿名对象的集合。

//一对多 SelectMany至关联引用 并使用本集合和投影后集合构造其他对象
var stu7 = context.Classes
    .SelectMany(p => p.Students, (p, s) => new SimpleStu {Id = s.StudentId, StudentName = s.Name})
    .ToList();

那么自然而然的也可以投影成简单对象,得到的是一个简单对象的集合。

最后,我们自然可以对对象的一般属性进行投影,这部分和Linq中时相同的,这里就不再赘述了,具体可以参考如下的代码:

//此处为投影到一般属性 stuNames为一个字符串列表 内含两个学生的名字
var stuNames = selectContext.Students.Select(p => p.Name).ToList();
//此处为投影到关联对象的一般属性 stuClassName为一个字符串列表 内含两个学班级的名字
var stuClassName = selectContext.Students.Select(p => p.Class.Name).ToList();

没有找到您需要的文档?

您还可以通过人工服务在线咨询,服务时间为每天上午9点至下午6点。

If you can't find required answer, get in touch with us online. We provide service from 9:00 to 18:00.

让编程成为一件快乐的事
现在开始