使用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()
但它不起作用。 有任何想法吗 ? 比你
答案 0 :(得分:2)
当您使用customerExternalID.Count()
替换customerExternalID.Length
或创建局部变量(假设为customerExternalIDCount
)并为其指定计数时,它应该有效。可能提供程序尝试将此Count
调用转换为SQL。
顺便说一句,您可能希望在未指定Substring
的情况下使用length
方法。如果数据库中有01_johnRobin
和02_johnRobins
,则johnRobin
customerExternalID
会获得2个结果。