Linq to SQL - 不要获取特定列

Jam*_*mes 17 .net linq sqlmetal linq-to-sql

有没有办法使用linqtosql获取特定列而不必使用匿名类型并单独指定每个返回的文件?

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

任何想法都赞赏.

Luc*_*cas 18

LINQ to SQL支持延迟加载各个属性.在DBML设计师,您可以设置Delay Loadedtrue在列的属性.延迟加载的列不会包含在初始值中SELECT.如果您尝试访问该对象的属性但尚未加载,则将SELECT执行另一个语句以从DB中获取此值.

如果您手动编辑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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

另请参阅Scott Guthrie本文中的"延迟/延迟加载"部分.


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

如果您根本不想使用或访问该列,并且您不希望它作为类属性提供,那么请使用Serapth的答案,即从DBML文件中删除该列.确保您了解其含义,例如该列上的并发检查丢失.


Jam*_*mes 1

感谢大家的意见。我最终确定的解决方案是简单地指定我想要带回的列,但要在我想要的类型的新对象的 Linq 语句中执行此操作...一个示例应该有所帮助!:

表日志有三列

  • 日志ID
  • 记录日期
  • 序列化数据

但我只想要日期记录和序列化数据。但是,我希望在SQLMetal 生成的数据容器中执行此操作

我通过以下声明实现了这一目标:


Dim q = 从 logItem In dc.Log 选择新日志 {.LogID = logItem.LogID, .DateLogged = logItem.DateLogged}


希望能对其他人有所帮助!