1

次のTSQLクエリに相当するEFメソッドの構文は何でしょうか。

select istb.service_id, ss.service_desc, selected=1
from istb_services istb
inner join setup_services ss on istb.service_id=ss.service_id
where istb.istb_id=3
union
select ss.service_id, ss.service_desc, selected=0
from setup_services ss
where ss.service_id not in (select service_id from istb_services where istb_id=3)

次のように、クエリの一部ではないものを変換してみました。

var _existing = context.istb_services.Where(e => e.istb_id == IstbID);
var _others = context.setup_services.Except(_existing);

しかし、コンパイル時エラーが発生しています。

'System.Data.Objects.ObjectQuery.Except(System.Data.Objects.ObjectQuery)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

異なるタイプのObjectQueryを.Exceptメソッドに渡すことができないことは理解していますが、代替コードは何でしょうか?

ありがとう、

4

1 に答える 1

1

次のことを試してください。

var resultA = 
    from istb in istb_services 
    join ss in setup_services on istb.service_id equals ss.service_id
    where istb.istb_id == 3
    select new { istb.service_id, ss.service_desc, selected = true };

var resultB =            
    from ss in setup_services 
    where !istb_services.Any(istb => 
        istb.service_id == ss.service_id &&
        istb.istb_id == 3)
    select new { ss.service_id, ss.service_desc, selected = false };

var result = resultA.Union(resultB);

同一のフィールドを持つ匿名型初期化子は、同じ匿名型にコンパイルして、2つのシーケンスをUnion操作に互換性を持たせる必要があります。

于 2012-05-28T20:00:53.520 に答える