在这个节目中,我有三个型号:Client
,Brokerage
和Subscription
.ASubscription
将客户与经纪公司联系起来.客户订阅了一家或多家经纪公司.
public class Client
{
public int Id { get; set; }
[Required, StringLength(50), DisplayName("Last Name")]
public string LastName { get; set; }
[Required, StringLength(50), DisplayName("First Name")]
public string FirstName { get; set; }
[DataType(DataType.Date),DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}",ApplyFormatInEditMode = true),Display(Name = "Birth Date")]
public DateTime BirthDate { get; set; }
[DisplayName("Full Name")]
public string FullName
{
get { return LastName + ", " + FirstName; }
}
public ICollection<Subscription> Subscriptions { get; set; }
}
public class Brokerage
{
[DatabaseGenerated(DatabaseGeneratedOption.None), DisplayName("Registration Number"), Required]
public string Id { get; set; }
[Required]
public string Title { get; set; }
[DataType(DataType.Currency), Column(TypeName="money")]
public decimal Fee { get; set; }
public ICollection<Subscription> Subscriptions { get; set; }
}
public class Subscription
{
public int ClientId { get; set; }
public string BrokerageId { get; set; }
public Client Client { get; set; }
public Brokerage Brokerage { get; set; }
}
现在,我正在try 编写一个LINQ查询,以便用户获得现有经纪公司的列表,并根据用户是否订阅该经纪公司来 Select 订阅或取消订阅该经纪公司.
为此,我有一个ViewModel,其中包含BrokerageID、经纪公司的名称和一个用于表示客户是否为成员的布尔值.使用以下LINQ查询在控制器中创建此ViewModel:
var subscriptions = (
from b in _context.Brokerages
join s in _context.Subscriptions on b.Id equals s.BrokerageId
select new BrokerageSubscriptionsViewModel
{
BrokerageId = b.Id,
Title = b.Title,
IsMember = s.ClientId == id
}).ToList();
这是almost美元在工作.
对于订阅了所有券商的用户,预期结果应如下所示:
A1 : {Unsubscribe}
A2 : {Unsubscribe}
A3 : {Unsubscribe}
但我得到的是整个订阅表的结果,
A1 : {Unsubscribe}
A1 : {Subscribe}
A1 : {Subscribe}
A2 : {Unsubscribe}
A2 : {Subscribe}
A2 : {Subscribe}
这是因为它正在从预订表中提取所有行,如果客户端ID不匹配,它将显示"Duplates".我曾try 添加where s.ClientId == id
条款,但这使得没有活跃订阅的用户什么都看不到,而他们应该看到订阅任何现有经纪公司的选项.
我已经在这个问题上挣扎了很长一段时间,如果能得到任何帮助,我将不胜感激.