0

ASP.NET MVC アプリケーションを開発しています。これらのクエリから共通のレコードを取得したい 2 つのクエリがあります。

共通レコードを取得するために単純な結合を作成すると思いますか?

 var poList = 
   (from po in db.PurchaseOrders
    where po.CompanyId == companyId && 
          po.PartyId == partyId && 
         (po.IsDeleted == false || po.IsDeleted == null)
    select po into newPO
    select new
    {
        Name = newPO.PONo,
        Id = newPO.Id    
    }); 

var poList2 = (db.Employees.Where(x => x.Id == EmpID)
      .SelectMany(x => x.Roles)
      .SelectMany(x => x.Employees)
      .Distinct()
      .SelectMany(x => x.PurchaseOrders)
      .Select(po => new { Name = po.PONo, Id = po.Id }));

結合を書き込もうとしていますが、もう 1 つ引数が必要です。一般的なレコードの単純な結合を作成するにはどうすればよいですか?

  var finalPO = poList.Join(poList2).ToList();
4

3 に答える 3

0

ユニオンは両方からのすべてのレコードを提供します: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx

Join メソッドは、指定されたキーに一致するレコードを提供しますが、パラメーターとして 2 つの列挙型以上が必要です: http://msdn.microsoft.com/en-us/library/bb534675.aspx

于 2013-07-09T05:07:54.963 に答える
0

最初のクエリの式を 2 番目のクエリの「生の」結果に適用できるため、結合は必要ありません。

var poList2 = db.Employees.Where(x => x.Id == EmpID)
                .SelectMany(x => x.Roles)
                .SelectMany(x => x.Employees)
                .Distinct()
                .SelectMany(x => x.PurchaseOrders);

var result = from po in poList2
             where po.CompanyId == companyId && 
                   po.PartyId == partyId && 
                   !po.IsDeleted
             select po into newPO
             select new
             {
                 Name = newPO.PONo,
                 Id = newPO.Id    
             }; 

そして、もともと取得するつもりだった結果が必要な場合poList2

var result2 = poList2.Select(po => 
              {
                  Name = po.PONo,
                  Id = po.Id    
              }; 

したがって、一般的に言えば、プロジェクションを匿名型に延期すると、クエリ本体でより多くのことができます。

サイドノート:!po.IsDeletedフィールドをnull不可にすることを強くお勧めするので、falseデフォルト値として使用しました。

于 2016-02-08T19:21:38.963 に答える