.net - Linq to SQL-不获取特定列

标签 .net linq linq-to-sql sqlmetal

有没有一种方法可以使用linqtosql来获取特定列,而不必使用匿名类型并分别指定每个返回的文件?

我们使用SQLMetal生成dbml文件,该文件包含将查询的数据结果放入的所有类型。但是,当linq查询中包含选择列时,结果将进入匿名类型,而不是dbml文件中声明的类型。我想从特定表中选择除一列以外的所有列,但仍然以相关的dbml类型返回结果。

任何想法表示赞赏。

最佳答案

LINQ to SQL支持lazy loading各个属性。在DBML设计器中,可以在列的属性中将Delay Loaded设置为true。延迟加载的列将不包含在初始SELECT中。如果您尝试访问该对象的属性并且尚未加载该对象,则将执行另一个SELECT语句以从数据库中获取该值。

如果要手动编辑DBML文件,请设置<Column IsDelayLoaded="true">。如果您要手工编写LINQ to SQL类,则就像将属性的后备字段声明为Link<T>而不是T一样简单。例如:

[Table]
public class Person
{
    private Link<string> _name;

    [Column(Storage = "_name")]
    public string Name
    {
        get { return _name.Value; }
        set { _name.Value = value; }
    }
}


另请参见this post by Scott Guthrie中的“延迟/延迟加载”部分。



更新:如果您希望在需要时该列仍然可用,则以上答案适用。除非您特别要求(请参阅SELECT)或尝试访问它,否则它不会包含在LoadOptions中。

如果您根本不想使用或访问该列,并且不希望将其作为类属性使用,则可以使用Serapth's answer从DBML文件中删除该列。确保您了解其中的含义,例如对该列进行并发检查丢失。

关于.net - Linq to SQL-不获取特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/852679/

相关文章:

c# - 如何使用 PLINQ 执行 IO 密集型任务?

c# - linq中的多个交叉引用表连接

c# - MVC Linq 查询在 WHERE 子句中使用动态列名

c# - 无法将类型为 'SZArrayEnumerator' 的对象转换为类型 'System.Collections.Generic.IEnumerator' 1[System.String]'

c# - 创建动态 linq 查询

c# - 对于需要在持久化之前创建关系的实体插入,我的代码应该放在哪里?

.net - 哪些方法可以关闭已编译的查询

c# - CSCore:收听 Audio Session 事件时发生访问冲突

.net - 如何在 Entity Framework 中执行 SQL BETWEEN 命令

c# - 设计依赖注入(inject)和单个数据上下文的重用