2016-03-18 6 views
0

Linqを使用してTicketSubscriptionモデルからすべてのチケット(ticketIds)を購読し、それらのIDをすべてチケットモデルにプラグインするコードがありますチケットのすべての情報を取得します。私は3つのステップでこれをやってみました。まず、UserIdをプルします。次に、ユーザーが購読しているすべてのIDを取得し、最終的にチケットのすべての情報を取得します。最初の2つの部分は正しいように見えますが、3つの部分はリストに表示されません。ここで私がしようとしていたコードです。Linqを使用して、別のモデルからフィルタリングされたリストを使用してモデルを取得する

var userID = db.Users.Where(u => u.NTUserName == User.Identity.Name).Select(u => u.UserId).Single(); 
var SubscribedIds = new HashSet<Guid>(db.TicketSubscriptions.Where(u => u.UserId == (userID)).Select(u => u.TicketId)); 
var SubscibedList = from ticket in db.Tickets 
       join TicketId in SubscribedIds on ticket.TicketId equals TicketId 
       select *; 

return View("SubscribedTickets", SubscibedList.ToPagedList(page, Properties.Settings.Default.PageSize)); 

私は、私はそれに対応するために持っているいくつかの異なるコードを変更しようとしましたが、私は2つをマージする方法を見つけ出すことはできません。ここで私はマージしようとしたコードは次のとおりです。

return db.Tickets 
     .Include(t => t.TicketNotes) 

     .Where(t => t.OpenUser.NTUserName == u).Where(t => t.TicketStatusId == ticketStatusId) 
     .OrderByDescending(t => t.TicketNumber) 
     .ToList(); 

私は含まt.ticketNotesを持っているとticketStatusIdにこの時間をフィルタリングする必要があります。私はこのような何かを行うことによって同様のクエリを達成しました

答えて

0

db.Tickets.Where(x => SubscriberIds.Contains(x.TicketId)); 
0

ちょうど行います

db.TicketSubscriptions.Where(u => u.UserId == (userID)).Select(u => u.Ticket) 

これはあなたのユーザーが加入しているすべてのチケットを与えます。

0

これは私が最終的にbgriffin4750の助けを借りていたものです。

var userID = db.Users.Where(u => u.NTUserName == User.Identity.Name).Select(u => u.UserId).Single(); 
var SubscribedIds = new HashSet<Guid>(db.TicketSubscriptions.Where(u => u.UserId == (userID)).Select(u => u.TicketId)); 
var SubscribedList = db.Tickets 
       .Include(t => t.TicketNotes) 
       .Where(t => SubscribedIds.Contains(t.TicketId)) 
          //.Where(t => (Properties.Settings.Default.ClosedID) 
       .OrderByDescending(t => t.TicketNumber) 
       .ToList(); 

return View("SubscribedTickets", SubscribedList.ToPagedList(page, Properties.Settings.Default.PageSize)); 
関連する問題