如何使用Entity Framework 6从数据库中获取数据

5

我已经构建了一个查询,从两个表中返回数据,它们通过内连接进行关联。虽然查询看起来没问题,但是当我尝试访问查询的选定字段名称时,我收到了错误消息。我该如何在这个查询中使用.SingleOrDefault()函数?有谁能帮我解决问题。

private void FindByPincode(int iPincode)
    {
        using (ABCEntities ctx = new ABCEntities())
        {
            var query = from c in ctx.Cities
                        join s in ctx.States
                        on c.StateId equals s.StateId
                        where c.Pincode == iPincode
                        select new {
                                s.StateName, 
                                c.CityName, 
                                c.Area};

            // var query = ctx.Cities.AsNoTracking().SingleOrDefault(_city => _city.Pincode == iPincode);

            if (query != null)
            {
                cboState.SelectedItem.Text =query.State;        //Getting error "Could not found"
                cboCity.SelectedItem.Text = query.CityName;     //Getting error "Could not found"
                txtArea.Text = query.Area;                        //Getting error "Could not found"

            }

        }
    }

感谢先行一步。

错误信息为“'System.Linq.IQueryable<AnonymousType#1>'不包含名为'StateName'的定义,也没有接受类型为'System.Linq.IQueryable<AnonymousType#1>'的第一个参数的扩展方法'StateName'可以找到(您是否缺少使用指令或程序集引用?)” - Jaan
3个回答

7

试试这个:

using (ABCEntities ctx = new ABCEntities())
    {
        var query = (from c in ctx.Cities
                    join s in ctx.States
                    on c.StateId equals s.StateId
                    where c.Pincode == iPincode
                    select new {
                            s.StateName, 
                            c.CityName, 
                            c.Area}).FirstOrDefault();

        if (query != null)
        {
            cboState.SelectedItem.Text =query.State;        
            cboCity.SelectedItem.Text = query.CityName;    
            txtArea.Text = query.Area;                        
        }
    }

1
我看了你的代码,但不明白为什么你要同时使用.First()SingleOrDefault()来获取数据……请问你能告诉我原因吗? - Monojit Sarkar

0

你是不是在选择一个名为StateName的字段,而后访问了State?

 cboState.SelectedItem.Text =query.State;    



cboState.SelectedItem.Text =query.StateName;    

请提供有关错误和代码类结构的更多详细信息。

0

以下是我遇到类似情况的解决方法:

using (ABCEntities ctx = new ABCEntities())
{
        var query = (from c in ctx.Cities
                    join s in ctx.States
                    on c.StateId equals s.StateId
                    where c.Pincode == iPincode
                    select new {
                            s.StateName, 
                            c.CityName, 
                            c.Area}).Single();

        if (query.Any())
        {
            cboState.SelectedItem.Text =query.State;
            cboCity.SelectedItem.Text = query.CityName;
            txtArea.Text = query.Area;
        }
}

请注意我在上面使用了query.Any(),这是因为query != null将始终返回true。但是any()会检查查询是否返回了1个或多个记录,如果是,则Any()返回true,如果查询未返回任何记录,则Any()返回false。

如果查询返回的不是单个结果,而是默认值,那么它将会抛出一个错误或异常。 - Sorangwala Abbasali
@SorangwalaAbbasali 在这种情况下,你可以使用SingleOrDefault()。 - Talha Imam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接