【问题标题】:Entity framework 4.0 quering with linq using Substring使用 Substring 使用 linq 进行实体框架 4.0 查询
【发布时间】:2012-12-21 07:32:56
【问题描述】:

我在使用 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()

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

【问题讨论】:

标签: .net linq entity-framework-4


【解决方案1】:

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

顺便说一句,您可能想使用Substring 方法而不指定length。例如,如果数据库中有 01_johnRobin02_johnRobins,您将得到 johnRobin customerExternalID 的 2 个结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多