4

使用 C#、WPF、.NET 4.5 在我的程序中,我试图从数据库中填充 TextBox 的值。该值是通过 LINQ 语句获得的。我已经尝试了所有不同的东西,比如To.String()等等Console.WriteLine()。如果你能找到一种很棒的方法来完成这项工作,如果你能找到一种更好的方法来选择数据并显示它,我会对此感兴趣出色地。C#代码:

private AuroraEntities auroraContext = null;    
private void LoadTB()
    { 
     this.auroraContext = new AuroraEntities();
     ObjectQuery<Inventory> inventories = auroraContext.Inventories;
     string name = ingNameCB.SelectedValue.ToString();  
     var queryResult = (from q in inventories
                        where q.InventoryName == name                          
                        select q);

    textBox1.DataContext = queryResult.ToString();
    }

XAML:

<TextBox Height="23" HorizontalAlignment="Left" Margin="70,186,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Path=InventoryName, Mode=TwoWay}" 

谢谢!

4

3 回答 3

4

你期待一个结果吗?如果是这样,请使用First、 或SingleFirstOrDefault来获取单个Inventory项目(这些选项中哪个最合适将取决于您的情况)。但是,您将拥有一个Inventory项目,但很Inventory.ToString()可能也不会给您您想要的东西。

您想从库存中显示什么其名称?它的描述?也许是一个组合?您应该非常仔细地考虑这一点——一旦您决定了您真正想要实现的目标,为其编写代码可能会非常简单。

如果您的查询可以返回多个结果,那么您需要考虑更多。拥有一个文本框是否有意义?也许您应该填充某种表格?

于 2013-08-03T19:56:16.477 回答
3

像这样的东西:

(from q in inventories
 where q.InventoryName == name                          
 select q).FirstOrDefault().InventoryName;

您还需要检查是否FirstOrDefault()不为空

于 2013-08-03T19:59:25.073 回答
1

你好你可以这样试试

var result = queryResult.FirstOrDefault();
textBox1.Text=result==null ? string.Empty :result.InventoryName;

我认为如果您的 InventoryName 不触发 NotifyPropertyChanged 则没有必要进行绑定,因此最好直接分配 Text 而不是 DataContext

于 2013-08-03T20:02:47.350 回答