0

したがって、現在のアプリケーションでは、単一のオブジェクトを返すリポジトリを使用してデータベースにクエリを実行する必要があります。問題は、情報が 2 つの異なるテーブルに分割されていることです。取得しようとしているオブジェクトは Rule オブジェクトです。ルール クラスは、次のデータベース エンティティで構成されます。

class Rule
    {
        STRATRULEDEF ruleDefinition { get; set; }
        List<STRATCODE> ruleCodeList { get; set; }

私のリポジトリでは、次のクエリを使用して関連情報を取得しています。

public void GetRule(int ruleKey)
        {
            Rule ruleQuery = from ruleDefinition in AREContext.STRATRULEDEFs
                            from ruleCodes in AREContext.STRATCODES
                            where ruleDefinition.STRATRULEKEY == ruleKey 
                                  && ruleCodes.STRATRULEKEY == ruleKey
                            select new { ruleDefinition, ruleCodes };

だから私には2つの問題があります。

1) ruleQuery を「Rule」オブジェクトとして返すにはどうすればよいですか。「var」を rule に変更すると、次のエラーが発生します。

エラー 10 型 'System.Linq.IQueryable' を 'TestRules.Rule' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)

System.Linq.IQueryable を TestRules.Rule にキャストできますか?

2) テーブルには 1 対多の関係があるため、クエリは 1 つの ruleDef レコードと複数の ruleCode レコードを返す必要がありますが、現時点では、相互に重複して存在する複数の ruleDef レコードを取得しています。何か案は?

ありがとう

スティーブ

4

2 に答える 2

2

オブジェクトを初期化する必要があり、単一のオブジェクトが必要な場合にRule使用できます。FirstOrDefault

IEnumerable<Rule> rules = from ruleDefinition in AREContext.STRATRULEDEFs
                          from ruleCodes in AREContext.STRATCODES
                          where ruleDefinition.STRATRULEKEY == ruleKey 
                             && ruleCodes.STRATRULEKEY == ruleKey
                          select new Rule
                          { 
                              ruleDefinition = ruleDefinition, 
                              ruleCodeList = ruleCodes.ToList()
                          };
Rule firstRule = rules.FirstOrDefault();  // can be null if rules is empty
于 2013-08-07T18:51:53.830 に答える