2

これは簡単なように思えますが、それを機能させる方法がわかりません。次のモデルを想像してください。

public class ModelA
{
    public string Code {get;set;}
}

public class ModelB
{
    public string Code {get;set;}
}

データベースから一連の ModelA を読み取っています。また、コードに基づいて ModelB を取得する必要があります。キッカーは、コードの一部のみを一致させる必要があることです。

たとえば、モデル A のコードは「1234.00」、モデル B のコードは「001234.20」の場合があります。1234 の部分を含む両方のコードに基づいて、2 つのモデルをリンクしたいと考えています。結合したいのですが、それがどのように可能かはわかりません。そのため、最初のデータセットを繰り返し処理してそれらを一致させることもできますが、それでもうまくいきません。

TruncateCode という文字列拡張メソッドを作成しました。これにより、必要な部分が得られますが、LINQ は比較または結合内での拡張機能の呼び出しをサポートしていないようです (メソッドが認識されず、使用できないという例外がスローされます)。 . これは基本的に私が試みていたものです:

var query = a in db.ModelASet
    (where clause)
    select a;

foreach(ModelA item in query)
{
    var query2 = b in db.ModelBSet
       where b.Code.TruncatedCode() == item.Code.TruncatedCode()   // this doesn't work :(
       select b;
}

親愛なる読者の皆さん、これにどのようにアプローチしますか?

(INB4 「なぜあなたのデータはこのようにレイアウトされているのですか?」 - これは 10 年以上前のレガシー データベースです。私はこれを機能させようとしています。)

4

1 に答える 1

1

ToList()拡張メソッドを使用するには、または同様のものを使用して結果を具体化する必要があります。

var list = (a in db.ModelASet
    select a).ToList();

foreach(var item in list)
{
    var query2 = b in list
       where b.Code.TruncatedCode() == item.Code.TruncatedCode()   // this doesn't work :(
       select b;
}
于 2013-10-25T23:24:53.240 に答える