嵌套的lambda表达式和字符串文化

时间:2010-03-16 16:20:57

标签: c# linq-to-sql lambda

我正在尝试执行嵌套的lambda表达式,如下所示:

textLocalizationTable.Where(
  z => z.SpokenLanguage.Any(
    x => x.FromCulture == "en-GB")
  ).ToList();

但我得到错误:

Member access 'System.String FromCulture' of 
'DomainModel.Entities.SpokenLanguage' not legal on type
'System.Data.Linq.EntitySet`1[DomainModel.Entities.SpokenLanguage].

TextLocalization与口语语言有这种关系:

[Association(OtherKey = "LocalizationID", ThisKey = "LocalizationID", Storage = "_SpokenLanguage")]
private EntitySet<SpokenLanguage> _SpokenLanguage = new EntitySet<SpokenLanguage>();
public EntitySet<SpokenLanguage> SpokenLanguage
{
     set { _SpokenLanguage = value; }
     get { return _SpokenLanguage; }
}

知道出了什么问题吗?


我已经尝试了同样的错误。

Spokenlanguage现在有这种关联:

    internal EntityRef<TextLocalization> _TextLocalization;
    [Association(ThisKey = "LocalizationID", OtherKey = "LocalizationID", Storage = "_TextLocalization")]
    public TextLocalization TextLocalization
    {
        get { return _TextLocalization.Entity; }
        internal set { _TextLocalization.Entity = value; LocalizationID = value.LocalizationID; }
    }

在datacontext上添加:

        DataLoadOptions dlo = new DataLoadOptions();
        dlo.LoadWith<TextLocalization>(text => text.SpokenLanguage);
        dc.LoadOptions = dlo;

还有什么想法吗?梅比,我只是误解了一些基本的东西?

1 个答案:

答案 0 :(得分:1)

问题肯定是“Linq to SQL”的问题,很可能是关联。

以下是一些建议:

  • 你没有提到你是否使用了 [AssociationAttribute]设置在你的 儿童餐桌,如果它不存在,你将需要它。
  • 您可能必须在DataContext上使用DataLoadOptions,因此在查询父表时会加载子表。
  • 在实体的 set 方法中&lt; T&GT;属性,我会用_SpokenLanguage.Assign(value)代替_SpokenLanguage = value