如何使LINQ成为多个表

时间:2015-06-19 09:20:14

标签: c# asp.net linq entity-framework code-first

我有两个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),我也真的感谢你。

2 个答案:

答案 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