c# - linq 查询的返回数据类型

标签 c# .net linq dynamic anonymous

我有一个函数返回一个对象,该对象表示我的数据库中的一条记录以及其他列。我想知道是否有另一种方法,而不是为此对象创建一个单独的类,例如:

public object GetRecord(string key)
{
    var item = select new {column1, column2};

    return item;
}

public void main() 
{
    var item = GetRecord(1);

    //  I want to be able to reference column1 on item.  
    var x = item.column1;  
}

最佳答案

是的,还有其他方法(实际上有很多),但我强烈建议您不要使用其中任何一种。处理这种情况的最佳选择是创建一个新的自定义类型来保存您拥有的数据。它将是迄今为止最易于维护的选项。

匿名类型专门设计用于单个方法的范围内。您正在与功能的设计作斗争以做其他事情,因此很难做到,您很可能会失去 Intellisense,性能很可能会受到影响,而需要回来维护代码的可怜的 sap 将不知道发生了什么或如何调整查询。

大多数替代解决方案的主要问题是您丢失了编译时检查。如果查询删除参数、添加参数、更改类型等,使用它的代码无法知道。在编写使用查询的代码时,您无法知道所有数据片段是什么、它们的类型是什么、变量的名称是什么等等。您需要担心编译器可以识别的变量名称中的拼写错误'catch,您将始终需要查看生成查询的方法的内部工作原理。您无法将其视为黑盒或抽象,这很重要。

如果您担心创建这些自定义类型所花费的时间和精力,可以使用许多自动化工具来生成基于数据库表或其他来源的此类类。

关于c# - linq 查询的返回数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14073726/

相关文章:

c# - 单程序集多语言 Windows 窗体部署(ILMerge 和附属程序集/本地化) - 可能吗?

c# - 在内存中缓存应用程序数据 : MVC Web API

c# - 如果多次调用,Concat会导致堆栈溢出

c# - 如何检查滚动条当前在 WPF DataGrid 中是否可见?

c# - RFC-1123 的日期时间给出了不准确的时区

c# - 简单的正则表达式无法识别字符“e”-为什么?

c# - 正则表达式 C# - 是否可以在匹配时提取匹配项?

c# - Automapper:从自动映射对象解析源属性名称

c# - LINQ to XML 到数据表

c# - Linq 根据对象属性从列表中选择对象