我有一个与另一个实体有关系的实体。我能够搜索主实体中的列,并包含关系实体中的列。但我需要能够在不在关系实体中的列上过滤列表(搜索)。
例如
Invoice Entity包含customerId属性,并且与包含customerName属性的Customer Entity相关
我需要能够按customerName搜索/过滤网格。
我是实体框架的新手,请帮助。
感谢
卡尔
答案 0 :(得分:0)
您的关系是1> 1。在这些情况下,我通常会将一个自定义类返回到包含我需要的所有列的网格,包括与其他表的连接。
所以基本上你需要的是用你的结果集创建一个自定义的linq查询。
mais查询应遵循以下示例:
var q = from i in ctx.Invoices
join c in ctx.Customers on i.CustomerID equals c.CustomerID
select new{InvoiceID=i.InvoiceID, InvoiceDate=i.Date, CustomerName=c.Name};
现在,假设我们收到一个CustomerName变量,其中包含要按c.Name过滤的字符串,我们可以这样做:
if(!string.IsNullOrEmpty(CustomerName))
{
q = q.where(c => c.Name.ToLower().Contains(CustomerName.ToLower()));
}
请注意,我正在执行ToLower()操作和Contains,这将作为LIKE ingnoring区分大小写并在客户名称中的任何位置搜索字符串。
最后你将返回为jqGrid序列化的q.ToList()...