1

LINQを使用して特定の列の値でデータベースから結果を取得するのに問題があります。

これは私のテーブルCustomer(Id、Name、Surname、ExternalID)です。ExternalIDは、01_johnDoeなどの特定の文字列パターンを持つvarchar列です。

顧客の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()

しかし、それは機能していません。何か案は ?あなたより

4

1 に答える 1

2

これは、ローカル変数(たとえば)を置き換えたり、作成してカウントを割り当てたりするときに機能するはずcustomerExternalID.Count()です。おそらくプロバイダーはこの呼び出しをSQLに変換しようとします。customerExternalID.LengthcustomerExternalIDCountCount

ところで、あなたはおそらくSubstring指定せずにメソッドを使用したいと思うでしょうlength。たとえば01_johnRobin02_johnRobinsデータベースにある場合、に対して2つの結果が得られjohnRobin customerExternalIDます。

于 2012-12-21T08:06:08.313 に答える