我对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')
我认为这很简单。
答案 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有点类似)