4

私は現在エンティティ フレームワークを使用しており、2 つの列を結合して Linq クエリを実行したいと考えています。1 つは「String」型で、もう 1 つは「Int32」型です。

に似たもの

from FirstEntity obj in context.FirstEntity 
                      join SecondEntity obj2 in context.SecondEntity on obj.SecondEntityId equals obj2.Id.ToString()

obj.SecondEntityId を String として、obj2.Id を Int32 として使用

残念ながら、ToString 操作は EF でサポートされていないようです。このエラー (文字列を Int32 に変換したい場合は、同様のエラー) が発生します。

LINQ to Entities がメソッド 'System.String ToString()' メソッドを認識しない

そして今まで、回避策を見つけることができませんでした。

助けてくれてありがとう。

4

4 に答える 4

2

通常、このようなものを2つのクエリに分割します(エンティティサポートへのlinqにToString()がないため、小さな子供に危害を加えたいと思うようになります)。

var query1 = (from SecondEntity obj2 in context.SecondEntity
             select obj2.ID).ToList();

// now we're using linq to objects which does support ToString()
query1 = query1.Select(x => x.ToString());

// mixing linq to entities and linq to objects
var query2 = from FirstEntity obj in context.FirstEneity
             join SecondEntity obj2 in query1 on obj.SecondEntityId equals obj2.ID

私はVSなしでこれを行っているので、構文の一部が間違っている可能性があり、特に優れたソリューションではありませんが、EFV1です。

于 2009-08-10T05:09:18.093 に答える
0

特別な Linq 構文ではなく、機能的な C# 構文を使用すると役に立ちますか?

var results = FirstEntity.Join(SecondEntity, 
     obj => obj.SecondEntityId, obj2 => obj2.Id.ToString(), 
    (obj, obj2) => new { First = obj, Second = obj2 });
于 2009-08-11T20:36:24.727 に答える
0

最後に、DB 側で、変換された文字列を保持する新しい int フィールドを使用して、テーブルに基づいてビューを作成しました。次に、EF エンティティをビューにマップしました。できます :)

残念ながら、EF側で適切な解決策が見つかりませんでした。バージョン 4.0 でこの種の問題が解決されることを願っています。

とにかく、助けてくれてありがとう。

于 2009-08-11T09:12:49.487 に答える