这个问题令人困惑,因为我真的不知道该怎么去问这个问题。使用linq从链接到另一个表的表获得单个记录
无论如何,我有4个表,我需要去TokenSetting表来获取单个记录。我得到了公司代码,我必须从那里旅行并获取我需要的其他信息。而且由于每个公司都有多个公司结构,我必须首先获得企业结构才能获得分配给它的令牌。
这里的布局:
这是我的代码:
_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();
您是否尝试记录执行的SQL语句,然后手动执行它们?给定的标准真的只有1个标记设置行吗? – 2013-03-26 21:40:03
是的,虽然我的问题确实是令牌设置被评估为可接受的。这意味着我不会返回单个记录的预期结果,而是返回一个集合。 – ErocM 2013-03-26 21:41:23
毕竟'TokenSettings'是一个复数;)也许你想重新设计表结构并在'Token'和'TokenSetting'表之间创建1:1关系。 – 2013-03-26 21:45:18