Linq to Sql没有提供正确的数据

时间:2011-08-30 13:12:41

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

这是非常简单的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#Code Behind(加载窗口的事件):

TMDataContext TMDataBase = new TMDataContext();

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

结果:

enter image description here

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

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

在做L2S之前,我已经构建了数据库,并且使用继承设计了一堆“实体”类,我必须删除这些类,因为它们导致了与L2S类的冲突。 L2S自动生成的类对我来说是非常糟糕的,我希望能够替换它们的属性,构造函数和添加方法。或者至少将它们重命名或扩展到我可以重新实现继承结构的地方。

我使用的方法很简单。 UI的一组类。一组用于处理业务逻辑的“Control”类,以及一组与DB接口的“Entity”类。但是整个L2S自动化类生成通过替换我的实体类来改变我的方式。

无论如何,我的第一个问题是我想在每个记录的列表框中显示作业标题(作业详细信息表中的一个字段)。当在列表框中更改选择时,将访问相关记录并填写一组允许用户编辑该记录的文本框。

对此的任何帮助都会非常有用。提前谢谢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

LinqToSql生成部分类。您可以提供其他部分,并且在dbml设计器重新生成时不会消除它。

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

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