2012-04-25 124 views
0

我有一个应用程序可以搜索我们的数据库(通过EF公开)来查找满足特定条件的记录。我们有两个主表(工作和收件人)。收件人通过作业ID链接到作业表。查询中的Where子句

作业记录包含各种字段(处理日期,名称,作业类型)。收件人有很多姓名和ID字段(例如帐号,姓氏等)

我想要显示一个搜索屏幕,他们在哪里看到要搜索的字段列表。 ASP.net代码会查看用户输入(或选定)哪个文本框,并基于该文本构建查询。

我只是试图找到最有效的方式。

粗糙的逻辑是:

if not string.isnullorempty(txtName.text) then 
     'Query.Where.Add clause = " AND Name like '@txtName' 
     'Query.WhereParameters.Add("@txtName",txtNAme.text 
    end if 

if not string.isnullorempty(txtAccountNumber.text) then 

.....etc 


if not string.isnullorempty(txtFromDate.text) then.. 

如果我坚持是搞清楚如何在更多的where子句添加。我应该只使用Entity SQL吗?

这可以返回强类型的EF对象吗?是否有可能返回作业和收件人对象?

例如如果我做了一个选择收件人。 ,工作。 from .... blah这个解析是否正确并返回链接的Recipient和Job对象?

回答

2

如果您从强类型未筛选查询开始,则可以使用Queryable.Where添加筛选。

Name = txtName.Text 
If Not String.IsNullOrEmpty(Name) Then 
    Query = Query.Where(Function(j) j.Name.Contains(Name)) 
End If 

如果未经过滤的查询链接正确的多个记录,这些链接会在您添加过滤器保存。

(免责声明:我不经常使用VB.NET,有可能是愚蠢的语法错误,但你应该能够得到的总体思路)

+0

所以,如果我保持通话query.where并添加新的函数,它们会被类似于SQL中的“和”吗? E.g name = john和date = @date。有没有办法指定他们作为or加入? – Dane 2012-04-25 07:51:22

+0

1)是的。 (请记住'Query ='部分,不要只调用Query.Where'并忽略结果。)从概念上讲,Query = Query.Where(a).Where(b).Where(c)'does(伪代码)Query =(select * from(select * from(select * from Query where a)where b)where c)',but that results with results'Query =(select * from Query where && b && c)',EF通常会这样翻译它。 2)你可以使用'联合'这个。 Query.Where(a).Union(Query.Where(b))'给出与Query.Where(a‖b)'相同的结果。 – hvd 2012-04-25 08:01:19