Linq在lambda subselect中做了一组

时间:2012-02-23 17:30:23

标签: vb.net linq lambda grouping

我对LINQ和Entity Framework有点新,所以相当简单的SQL查询让我很头疼。我有一个用户输入屏幕,允许他们选择输入值,结果查询取决于用户输入的值。生成的查询将结果分组以显示唯一客户列表

简化的表格设计 - 客户可以处于多个州

客户
 CustomerId
 姓名
 JoinDate


 StateId
 CustomerId

因此,用户必须在屏幕上输入客户名称才能触发查询,但状态是一个可选字段,因此我的查询需要在代码中有点动态。我写的基本LINQ非常简单

dim cust = from c in ctx.Customer
where c.Name = InputFromScreen
Select c.CustomerId, c.Name, c.JoinDate, C.State

现在我有一个基本LINQ查询,我可以使用lambda表达式来进一步减少查询集,具体取决于屏幕输入(将ANDs附加到where)。

示例:如果用户输入了加入日期字段的值:
cust = cust.Where(Function(c) c.JoinDate = DateFromScreen)

但是我无法弄清楚如何添加状态的Where / Group,因为State是导航而不是表格,我只希望每个客户有一行,即使客户有多个状态

SQL的相当简单(这不是最佳的,但为屏幕上的每个项目添加AND是最简单的示例)
select c.customerid, c.name
from customer c
where c.name = 'input' and c.JoinDate = 'input' and
c.customerid in (select customerid from state where state = 'IN')

我认为这很简单。

1 个答案:

答案 0 :(得分:1)

与您的SQL查询等效的Linq to Entities将是:

var customers = from c in ctx.Customer
                where c.States.Any(s=> s.State == "IN")
                select new { c.CustomerId, c.Name };

这假设您的States实体上有导航属性Customer

(上面是C#语法,我确定VB有点类似)