使用linq从链接到另一个表的表中获取单个记录

时间:2013-03-26 21:35:16

标签: c# linq

问题很混乱,因为我真的不知道怎么问这个。

无论如何,我有4个表,我需要到TokenSetting表来获取单个记录。我得到了公司代码,我必须从那里旅行并获得我需要的其他信息。而且因为每个公司都有多个公司结构,所以我必须首先获得公司结构以获得分配给它的标记。

这是布局:

enter image description here

这是我的代码:

  _currentcorp = (from c in _entities.Corporations
              where c.CompanyCode == textBox_CompanyCode.Text
              select c).FirstOrDefault();

  if (_currentcorp == null)
  {
    errorProvider1.SetError(textBox_CompanyCode, "Invalid corporation.");
    return;
  }

  var corpstructure = (from cs in _currentcorp.CorporationStructures
                          where cs.District == null &&
                                cs.Branch == null &&
                                cs.Region == null
                          select cs).FirstOrDefault();

  if (corpstructure == null)
  {
    errorProvider1.SetError(textBox_CompanyCode, "Invalid corporation structure.");
    return;
  }

  var tokensetting = (from ts in _currentcorp.Tokens
                      where ts.CorporationStructureId == corpstructure.CorporationStructureId                           
                      select ts.TokenSettings).FirstOrDefault();

令牌设置即使我告诉它获得firstordefault,也会以可数字的形式返回。我假设它是在说代币上的第一个缺陷?

无论如何,令牌设置表中应该只有1条记录,即使该表是1对多。如何仅在此表上返回firstordefault?

====答案====

根据建议,我做了以下事项:

  var tokensetting = (from ts in _currentcorp.Tokens
                      where ts.CorporationStructureId == corpstructure.CorporationStructureId                           
                      select ts.TokenSettings.FirstOrDefault()).FirstOrDefault();

1 个答案:

答案 0 :(得分:2)

我相信LINQ查询返回的IEnumerableIEnumerables,因此第二个.FirstOrDefault()可以为您提供所需内容。

第一个调用指定您想要LINQ查询结果中的第一行,第二个调用指定您想要ts.TokenSettings的第一个元素,它本身就是一个集合。

相关问题