我有两个EF实体:客户端和福利。 (在数据库中,它们在中间表中连接:“ClientsBenefits”,如果它很重要),我将它们连接到中间类“ClientIndexData”中,因为它是在asp.net指南上提供的。
您能否告诉我如何使用LINQ搜索没有优惠的客户?
我知道,如何使用SQL做到这一点,但我真的对LINQ特定的语法感到惊讶,我不能做任何比休闲更复杂的事情。所以(i => i.Name == null):(我在尝试像这样的人:
yourID/feed
客户变量的位置是:
clients.Clients = clients.Clients.Where(i => i.Benefits == null)
ClientIndexData类是:
var clients = new ClientIndexData();
clients.Clients = db.Clients
.Include(i => i.Schedules.Select(c => c.FintessArea))
.Include(i => i.Paids)
.Include(i => i.Benefits)
.Include(i => i.Tickets);
if (benefitId != null)
{
ViewBag.BenefitId = benefitId.Value;
clients.Benefits = clients.Clients.Where(
i => i.СlientIdentificator == id.Value).Single().Benefits;
}
....
如果你建议我如何使用LINQ计算每个客户的利益(或票数)(使用groupBy和count),我也真的感谢你。
答案 0 :(得分:3)
使用LINQ ORM,您通常会尝试避免连接并直接使用导航属性。您可以将其写为对象在内存中并通过常规对象引用和集合进行连接:
overflow:hidden;
或者,在SQL Server上不太好和慢:
clients.Clients.Where(i => !i.Benefits.Any())
请注意,LINQ to数据库查询看起来非常像对象查询的正常LINQ。在这两种情况下,这项技能都将使您受益。
答案 1 :(得分:2)
如果客户没有福利,您的福利将永远不会为零,福利金额将为0 为了获得您的福利计数
clients.Clients.Select(i => i.Benfits.Count());
请注意,您可以选择复杂对象,例如
public class BenefitsCount
{
public int ClientId { get; set; }
public int BenefitsCount { get; set; }
}
clients.Clients.Select(i => new BenefitsCount {
ClientId = i.ClientId,
BenefitsCount = i.Benfits.Count()
});
这将返回IEnumerable