私は(主に私がhereを受けたヘルプから来た)私が使用している次のクエリを持っている:はなぜオブジェクトへの私のLINQクエリ結果を返しませんか?
public IEnumerable<Entities.AuditAgency> GetAuditRuleAgencyRecords(IEnumerable<Entities.AuditRuleEnterprise> rules)
{
using (LinqModelDataContext db = new LinqModelDataContext())
{
// Left-Outer Joins on Agency and its various other tables.
var auditAgencyRecords = (from ag in db.Agencies
join ara in db.AuditRuleAccounts on ag.Agency_Id equals ara.AgencyID into aran
from ara in aran.DefaultIfEmpty()
join arr in db.AuditRuleResults on ara.AuditRuleAccountID equals arr.AuditRuleAccountID into arrn
from arr in arrn.DefaultIfEmpty()
join are in db.AuditRuleEnterprises on arr.AuditRuleEnterpriseID equals are.AuditRuleEnterpriseID into aren
from are in aren.DefaultIfEmpty()
select new
{
AgencyID = ag.Agency_Id,
AgencyName = ag.Agency_Name,
AuditRuleEnterpriseID = arr.AuditRuleEnterpriseID,
AuditRuleEnterpriseName = are.OverrideDisplayName,
CorrectedDate = arr.CorrectedDate,
NbrDaysToCorrect = arr.NbrDaysToCorrect,
});
IEnumerable<AuditAgency> AuditAgencies = auditAgencyRecords
.GroupBy(a => a.AgencyID)
.Select(ag => new AuditAgency()
{
AgencyID = ag.Key,
AgencyName = ag.First().AgencyName,
Rules = ag
.GroupBy(agr => agr.AuditRuleEnterpriseID)
// ----> Do a left outer join on parameter "rules" object and the returned group above
// ----> on both of their ID's
.Select(agrg => new AuditAgencyRule() // Now I would like to only be creating "rules" for the rules with IDs that match the rules passed into this method
{
AuditRuleID = agrg.Key,
AuditRuleName = agrg.First().AuditRuleEnterpriseName,
Days = (Int32)agrg.Average(agrgr => agrgr.NbrDaysToCorrect)
})
}).ToList();
return AuditAgencies;
}
これは私AuditAgencyオブジェクトのリストを返し、各AuditAgencyはAuditAgencyRulesのリストが含まれています。
今..です私の最後のこのクエリのステップ、と私はトラブルを抱えている一部として、あなたはIEnumerableを規則は、このメソッドにパラメータとして渡されることがわかります。それは、各機関のためのルールのリストを作成し、そこに私の2番目のクエリで、私は左の外側をしたいされて私は何をしたい、
は私の地元の「ルール」オブジェクトに参加します。私が渡している各ルールオブジェクトにはルールがあります.ID。私は、各代理店に渡されたルールだけを格納したいと思います。データがない場合は、その内容をそのままにしておきます。
は今のところ、私のクエリは、データベースとそのデータから返されたすべてのルールが含まれています。ただし、データベースから返されるルールと一致するかどうかにかかわらず、メソッドに渡されるルールのみを格納する必要があります。言い換えれば、私は今そこにあるルールを使って、ローカルの "ルール"オブジェクトに対して左外部結合を行う必要があります。私は私がやろうとしている場所と内容を説明するために上記のコードにコメントを追加しましたところ
あなたが見ることができます。
したがって、「ルール」にIDが設定された3つのルールしか含まれていない場合、これらのルールのデータがあるかどうかにかかわらず、このクエリは3つのルールを返すことになります。各代理店のすべての規則を返すのではなく、それが現在のことです。
は、どのように私はこの左外側にはSQLクエリに私のLINQに「ローカル」オブジェクトに対して参加書くのですか?
foreach (var agency in AuditAgencies)
{
agency.Rules = from rule in rules
join lr in agency.Rules on rule.EnterpriseID equals lr.AuditRuleID into g
from lr in g.DefaultIfEmpty()
select new AuditAgencyRule
{
AuditRuleID = rule.EnterpriseID,
AuditRuleName = rule.Name,
Days = lr.Days,
Flagged = lr.Flagged,
PercentFlagged = lr.PercentFlagged
};
}
ませんサイコロ:ここ
は私が私の「ルール」オブジェクトを左外部結合を行うに私の試みと上記、第2のクエリの後に私のAuditAgenciesのルールです。さて、すべてのルールの代わりに、私は〜ないルールを得ています。私が望むのは、このメソッドに渡すルールを取得することだけです。
誰かが正しい方向に向かうことができますか?
ローカルクエリとSQLクエリを混在させることができませんでした。また、結果をフィルタリングするだけではなく、左外部が必要なので、データベースから返されたルールのエントリ/データがあるかどうかにかかわらず、渡されるもののルールエントリがあることを確認します。 。私は何か正しいことをしていない。地獄、私は正確にどこに参加するか分からない。 – KingNestor