代码之家  ›  专栏  ›  技术社区  ›  James

Linq to SQL-不获取特定列

  •  17
  • James  · 技术社区  · 17 年前

    我们使用SQLMetal生成dbml文件,该文件包含将查询数据结果放入其中的所有类型。但是,当linq查询中包含选择列时,结果将进入匿名类型,而不是dbml文件中声明的类型。我想选择

    5 回复  |  直到 17 年前
        1
  •  18
  •   Community Mohan Dere    9 年前

    lazy loading Delay Loaded 到 true 在列的属性中。延迟加载的列将不包括在初始列中 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; }
        }
    }
    

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


    更新:如果您希望该列在需要时仍然可用,则上述答案适用。它不会包含在 选择 除非你特别要求(见 LoadOptions

    如果你根本不想使用或访问该列,也不希望它作为类属性可用,那么请使用 Serapth's answer 从DBML文件中删除该列。请确保您理解其中的含义,例如该列的并发检查丢失。

        2
  •  4
  •   Serapth    17 年前

        3
  •  1
  •   James    17 年前

    感谢大家的意见。我最终决定的解决方案是简单地指定我想带回来的列,但要在Linq语句中在我想要的类型的新对象中这样做。..一个例子应该会有所帮助!:

    • 日志ID
    • 已记录日期

    但我只想要DateLogged&;序列化数据。然而,我希望如此 SQLMetal生成的数据容器


    Dim q=来自直流中的logItem。日志使用{.LogID=logItem.LogID,.DateLogged=logItem.DateLogded}选择新日志


    希望这能帮助到其他人!

        4
  •  1
  •   anorm    15 年前

    this link

    它基本上使用XSLT对生成的文件进行后处理,将列类型从 X 到 Link<X> System.Data.Linq

        5
  •  0
  •   Andrew Hare    17 年前

    推荐文章