【问题标题】:Linq to Sql Not giving proper dataLinq to Sql 没有给出正确的数据
【发布时间】:2011-08-30 21:21:54
【问题描述】:

这是一个非常简单的 linq,我才刚刚开始。我已将问题追溯到 3 个来源之一,但不确定如何解决。所以这里是代码,我会在下面解释问题。

XAML 绑定:

<ListBox Name="lstJobs" ItemsSource="{Binding Path=Title}" DockPanel.Dock="Top"
                MinWidth="150" MinHeight="200" MaxHeight="250"
                ScrollViewer.VerticalScrollBarVisibility="Visible"
                SelectionChanged="lstJobs_SelectionChanged" />


C# 代码隐藏(窗口加载事件):

TMDataContext TMDataBase = new TMDataContext();

lstJobs.ItemsSource = from j in TMDataBase.JobDetails
                      select j;

结果:

问题: 我知道连接正常,因为 JobDtail 表中只有 3 条记录。

回到大学时,我们了解到如果 ToString 方法没有被重载以强制它执行其他操作,则类会输出它们的名称。问题是我不想修改 L2S 生成的类,因为它们是自动生成的,以后任何修改都会丢失。我将进行更改,因此对自动生成的代码进行更改是多余的。

在进行 L2S 之前,我已经构建了数据库,以及一堆使用继承预先设计的“实体”类,我不得不删除它们,因为它们会与 L2S 类发生冲突。 L2S 自动生成的类对我来说太麻烦了,我希望能够替换它们的属性、构造函数和添加方法。或者至少将它们重命名或扩展到更整洁的地方,以便我可以重新实现我的继承结构。

我使用的方法很简单。 UI 的一组类。一组“控制”类处理业务逻辑,一组“实体”类与数据库接口。但是整个 L2S 自动化类生成通过替换我的实体类阻碍了我的工作。

无论如何,我的第一个问题是我想在每条记录的列表框中显示职位(职位详细信息表中的一个字段)。当列表框中的选择发生变化时,相关记录将被访问,并将填充一堆文本框,允许用户编辑该记录。

对此的任何帮助都会非常感激。提前致谢。

【问题讨论】:

    标签: linq linq-to-sql linq-to-objects


    【解决方案1】:

    您的 C# 代码正在覆盖您的 XAML 绑定。目前它只是在您的对象上调用 ToString ,因为它不知道要显示哪个属性。在您的 XAML 中,您需要指定 DisplayMemberPath/ValueMemberPath 或使用 DataTemplate,或者在您的 LINQ 中只投影一个字符串列表:

    lstJobs.ItemsSource = from j in TMDataBase.JobDetails 
                          select j.Title;
    

    【讨论】:

    • 只需添加DisplayMemberPath="Title"。这应该仍然绑定您的 JobDetails 对象,但显示您的作业详细信息对象的 Title 属性。
    • 当然,如果您只需要标题而不是其他详细信息,那么如果您只投影标题而不是获取和水合整个 JobDetail 对象实例,您的内存占用和性能会更好每条记录。
    【解决方案2】:

    LinqToSql 生成部分类。您可以提供另一部分,当 dbml 设计器重新生成时,它不会被清除。

    这允许您根据需要向这些类添加 .ToString。

    或者,您可以更改将数据绑定到 UI 控件的方式。

    【讨论】:

    • 感谢您的提示。我会查找更多关于部分类的信息。这会让我做我想要的继承结构,让我覆盖和添加我自己的属性和添加方法。您不必告诉我如何,我可以自己研究它,但我想在开始研究之前知道是否有可能。感谢您的回答。
    • 是的。玩得开心。检查 Designer.cs 。警告:如果其他成员没有映射属性,则这些成员将无法转换为 sql,并且不应在对数据库的查询中使用(运行时错误)。
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多