C# 返回Azure表实体;最好使用DTO或解构元组?

C# 返回Azure表实体;最好使用DTO或解构元组?,c#,azure-table-storage,C#,Azure Table Storage,在阅读本文时,我注意到您可以将select属性从一个对象提取到一个元组中。这似乎是一种从Azure表查询返回对象子集的好方法,否则将使用您可能不需要的属性(例如eTag、PartitionKey、RowKey等)填充您的查询对象 在过去,我创建了我的类,并在其中创建了一个DTO来表示我希望从web API查询返回的属性子集,如下所示: public class Person : TableEntity { public Person(string firstName, string la

在阅读本文时,我注意到您可以将select属性从一个对象提取到一个元组中。这似乎是一种从Azure表查询返回对象子集的好方法,否则将使用您可能不需要的属性(例如eTag、PartitionKey、RowKey等)填充您的查询对象

在过去,我创建了我的类,并在其中创建了一个DTO来表示我希望从web API查询返回的属性子集,如下所示:

public class Person : TableEntity
{
    public Person(string firstName, string lastName)
    {
            PartitionKey = firstName;
            RowKey = lastName;
    }

    public Person(){} //parameterless constructor needed by Azure Tables

    public string SomeValue1 {get; set;}
    public string SomeValue2 {get; set;}
}

public class PersonDTO
{
    public string SomeValue1 {get; set;}
    public string SomeValue2 {get; set;}
}
当我使用我的
Person
对象时,我想我可以创建一个扩展方法来返回元组,并完全去掉
PersonDTO
。这有意义吗?这是定义DTO的可行替代方案吗?如果不是,后果如何?我不喜欢为DTO管理单独的类,它实际上只是Azure表中原始实体的属性子集

public static (string, string) GetValues(this Person p)
{
    return (p.SomeValue1, p.SomeValue2);
}
被称为:

Person person = new Person("Frank", "Rizzo")
{
    person.SomeValue1 = "Value1",
    person.SomeValue2 = "Value2"
};
var (personValue1, personValue2) = person.GetValues();
Person p = new Person("Frank", "Rizzo")
{
    SomeValue1 = "Value1",
    SomeValue2 = "Value2"
};

var (someValue1, someValue2) = p;
更新:另一种选择似乎是将重载与
解构
名称一起使用,而不需要如下扩展方法:

public void Deconstruct(out someValue1, out someValue2)
{
    someValue1 = SomeValue1;
    someValue2 = SomeValue2;
}
被称为:

Person person = new Person("Frank", "Rizzo")
{
    person.SomeValue1 = "Value1",
    person.SomeValue2 = "Value2"
};
var (personValue1, personValue2) = person.GetValues();
Person p = new Person("Frank", "Rizzo")
{
    SomeValue1 = "Value1",
    SomeValue2 = "Value2"
};

var (someValue1, someValue2) = p;

语法可能稍有偏离(从内存中编写,而不是实际的工作代码示例)。

所以看起来主要目标是去掉表存储添加的元数据字段?或者您严格地只想返回几个属性吗?在某些情况下,它可能会删除元数据字段。在其他情况下,有必要对返回的内容进行非常有选择性的选择。你有没有研究过?简单地说。我想我只是想了解这是否是一个可行的替代方案,以及与涉及另一个依赖项的解决方案相比,它的优缺点是什么。当它只是一个包含两个或三个元组元素的元组时,元组方法实际上没有任何缺点(除了结构)。对于更多的元素,由于它们的值语义,它们变得效率低下。