Jam*_*mes 17 .net linq sqlmetal linq-to-sql
有没有办法不使用linqtosql获取特定列而不必使用匿名类型并单独指定每个返回的文件?
我们使用SQLMetal生成dbml文件,该文件包含将查询数据结果放入其中的所有类型.但是,当linq查询中包含select列时,结果将转换为匿名类型,而不是dbml文件中声明的类型.我想从特定表中选择除一个列之外的所有列,但仍然在相关的dbml类型中返回结果.
任何想法都赞赏.
Luc*_*cas 18
LINQ to SQL支持延迟加载各个属性.在DBML设计师,您可以设置Delay Loaded
到true
在列的属性.延迟加载的列不会包含在初始值中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文件中删除该列.确保您了解其含义,例如该列上的并发检查丢失.
感谢大家的意见。我最终确定的解决方案是简单地指定我想要带回的列,但要在我想要的类型的新对象的 Linq 语句中执行此操作...一个示例应该有所帮助!:
表日志有三列
但我只想要日期记录和序列化数据。但是,我希望在SQLMetal 生成的数据容器中执行此操作
我通过以下声明实现了这一目标:
Dim q = 从 logItem In dc.Log 选择新日志 {.LogID = logItem.LogID, .DateLogged = logItem.DateLogged}
希望能对其他人有所帮助!
归档时间: |
|
查看次数: |
6173 次 |
最近记录: |