2

私は本当にこれを尋ねる方法を知らなかったので、質問は混乱しています。

とにかく、私は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();

トークン設定は、firstまたはdefaultを取得するように指示しているにもかかわらず、無数に戻ってきています。トークンでfirstordefaultを取得すると言っていると思いますか?

とにかく、テーブルが1対多であっても、トークン設定テーブルには1つのレコードしか存在しないはずです。このテーブルでのみfirstまたはdefaultを返すにはどうすればよいですか?

====回答====

提案されたように、私は次のことをしました:

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

1 に答える 1

3

LINQクエリはのを返しているIEnumerableと思いますIEnumerablesので、1秒.FirstOrDefault()で必要なものが得られるはずです。

最初の呼び出しは、LINQクエリの結果の最初の行が必要であることを指定し、2番目の呼び出しはts.TokenSettings、それ自体がコレクションであるの最初の要素が必要であることを指定します。

于 2013-03-26T21:47:39.350 に答える