实体框架4.0使用子串查询linq

时间:2012-12-21 07:32:57

标签: .net linq entity-framework-4

使用LINQ按特定列值从数据库获取结果时遇到问题。

这是我的表Customer(Id,Name,Surname,ExternalID)。 ExternalID是具有特定字符串模式的varchar列,例如01_johnDoe。

让我们说我想让客户johnDoe和我的mehod得到字符串johnDoe。

我能够通过这种方式做到这一点:

public<Customer> GetMeACustomer(string customerExternalID)
{
using(var context=new MyContext())
{

var customerObject=(from c in contex.Customer where c.ExternalID.Contains(customerExternalID)).Single()   

}

}

此代码不够简单,因为发送到数据库的查询使用运算符LIKE。这很慢(我有很多客户)。 我无法在linq里面实现这样的东西:

   var example = ExternalIDFromDatabase.Substring(ExternalIDFromDatabase.IndexOf("_") + 1, customerExternalID.Count());

通过这段代码我可以简单地说

var customerObject=(from c in contex.Customer where c.ExternalID.Substring(c.ExternalID.IndexOf("_") + 1, customerExternalID.Count())==customerExternalID).Single()

但它不起作用。 有任何想法吗 ? 比你

1 个答案:

答案 0 :(得分:2)

当您使用customerExternalID.Count()替换customerExternalID.Length或创建局部变量(假设为customerExternalIDCount)并为其指定计数时,它应该有效。可能提供程序尝试将此Count调用转换为SQL。

顺便说一句,您可能希望在未指定Substring的情况下使用length方法。如果数据库中有01_johnRobin02_johnRobins,则johnRobin customerExternalID会获得2个结果。