1

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

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

假设我想获得客户 johnDoe,而我的方法获得字符串 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()

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

4

1 回答 1

2

当您替换customerExternalID.Count()customerExternalID.Length或创建局部变量(比如说customerExternalIDCount)并将计数分配给它时,它应该可以工作。可能提供者试图将此Count调用转换为 SQL。

顺便说一句,您可能想使用Substring方法而不指定length. 例如01_johnRobin,如果02_johnRobins在数据库中有和,您将获得 2 个结果johnRobin customerExternalID

于 2012-12-21T08:06:08.313 回答