有没有一种方法可以使用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/