LinqToSQL需要明确吗?

时间:2015-07-22 18:30:16

标签: c# asp.net linq-to-sql

我正在尝试使用从LinqToSQL语句中检索到的项目列表来填充数据网格,这对我来说会引起一些混乱。

当我明确地将where子句设置为等于硬编码整数时,返回列表时没有任何问题。但是,当我使用具有包含相同整数的属性的对象时,将返回列表但不填充数据网格。

正在返回的列表,我假设私有和公共属性。硬编码的整数返回列表包含所有属性,而具有属性返回列表的对象仅包含私有属性,而公共属性则声明“由于先前的函数评估超时而禁用了函数评估”

Example:
     object.country
            _countryid
            _continentid
            _countryname
            CountryID
            ContinentID
            CountryName

以下是两个LinqToSQL语句(两者都返回一个项目列表,但只有一个没有抛出错误):

使用LinqToSQL语句

protected void rgcountry_NeedDataSource(object sender, EventArgs e)
{
    List<db_entity.country> _clist;
    using (db_era.era_entities _ee = new db_era.era_entities())
    {
        _clist = (from a in _ee.countries where a.ContinentID == 4 select a).ToList();
    }
    if (_clist.Count > 0)
        this.rgcountry.DataSource = _clist;
    else
        this.rgcountry.DataSource = empty();
}

非工作LinqToSQL语句 - (设置了continentselected,continentID确实有值)

protected void rgcountry_NeedDataSource(object sender, EventArgs e)
{
    List<db_entity.country> _clist;
    if (continentselected != null)
    {
        using (db_era.era_entities _ee = new db_era.era_entities())
        {
            _clist = (from a in _ee.countries where a.ContinentID == continentselected.ContinentID select a).ToList();
        }
        if (_clist.Count > 0)
            this.rgcountry.DataSource = _clist;
        else
            this.rgcountry.DataSource = empty();
    }
    else
        this.rgcountry.DataSource = empty();
}

我在这里缺少什么?或者这就是LinqToSQL的工作方式?

1 个答案:

答案 0 :(得分:0)

问题如下。使用不同的数据上下文检索 continentselected 。您可以通过

为查询创建新的数据上下文
using (db_era.era_entities _ee = new db_era.era_entities())

continentselected 并不属于该上下文。 Linq to sql不会对来自不同数据上下文的实体执行操作。对于您的查询,请使用您用于检索 continentselected 实体实例的相同数据上下文