2013-03-26 79 views
1

这个问题令人困惑,因为我真的不知道该怎么去问这个问题。使用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(); 

tokensetting是回来了,即使我告诉它来获取firstordefault为IEnumerable。我假设它是说在令牌上获得第一个默认值或第一个默认值?

无论如何,即使表格是1对多,tokensetting表中也应该只有1条记录。如何仅在此表上返回第一条或第三条错误?

==== ====答案

至于建议,我做了以下内容:

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

您是否尝试记录执行的SQL语句,然后手动执行它们?给定的标准真的只有1个标记设置行吗? – 2013-03-26 21:40:03

+0

是的,虽然我的问题确实是令牌设置被评估为可接受的。这意味着我不会返回单个记录的预期结果,而是返回一个集合。 – ErocM 2013-03-26 21:41:23

+0

毕竟'TokenSettings'是一个复数;)也许你想重新设计表结构并在'Token'和'TokenSetting'表之间创建1:1关系。 – 2013-03-26 21:45:18

回答

2

我相信LINQ查询返回的IEnumerables一个IEnumerable,所以第二.FirstOrDefault()应该得到你想要的。

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

+0

是很简单的,我试图把它放在之前,但在这之外(()这次我把它们放在里面,它的工作! Tyvm! – ErocM 2013-03-26 21:50:08

相关问题