来自EF麻烦的C#,Linq数据

时间:2010-10-29 07:02:30

标签: wpf linq c#-4.0

我对编程没有多少经验。我在一个项目上工作(学习)。我正在使用C#4.0和WPF 4与EF(SQLite)。我遇到LINQ问题。

以下是有问题的代码(我希望这已经足够了,如果需要更多,请告诉我)

        private void cboSelectCompany_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        using (ShippingEntities context = new ShippingEntities())
        {
            var companies = from company in context.Deliveries
                            where company.State == cboSelectCompany.SelectedItem.ToString()
                            select company;

            txtDeliveryName.Text = companies.Name;
            txtDeliveryState.Text = companies.State;
        }

最后两行不起作用。我误解了LINQ的回归吗?我刚收到此错误

Error   5   'System.Linq.IQueryable<SqliteDemo.Delivery>' does not contain a definition for 'State' and no extension method 'State' accepting a first argument of type 'System.Linq.IQueryable<SqliteDemo.Delivery>' could be found (are you missing a using directive or an assembly reference?)   c:\users\dan\documents\visual studio 2010\Projects\SqliteDemo\SqliteDemo\DeliveryCompanies.xaml.cs  49  51  SqliteDemo

如果有人能给我一些指示或参考,我会很感激

3 个答案:

答案 0 :(得分:2)

你很亲密!

Linq正在返回一个尚未执行的Queryable交付集。我基于读取代码的猜测是,您最多只期望一个结果,然后您想将这些值放入某种类型的UI中。在这种情况下,您要做的是:

  1. 带上你的IQueryable并执行它
  2. 确保抓住第一行(或者,强制执行只有一行)行
  3. 在用户界面中设置适当的值。
  4. 所以,在那里留下带有查询的行,然后将其余部分改为:

    var company = companies.FirstOrDefault();
    txtDeliveryName.Text = company.Name;
    txtDeliveryState.Text = company.State;
    

    根据需要插入空值检查,然后查看First,FirstOrDefault,Single和SingleOrDefault之间的差异,看看哪一个最适合您的特定情况。

答案 1 :(得分:0)

好像,companies.State似乎无法编译,因为companiesSqliteDemo.Delivery的列表(而不仅仅是SqliteDemo.Delivery)。

你想要达到什么目的?想象一下,你的LINQ查询返回了几个结果,是否可能?

答案 2 :(得分:0)

只需使用companies.FirstOrDefault()companies.Single()来访问第一项,因为默认情况下LINQ会返回项目集合而不仅仅是单项。