0

特定の時間に特定のユーザーが利用できるアイテムを照会する ServiceOperation があります。要するに、この方法は次のことを行います。

var fullResult = from i in Items where ... select i; //get ALL possible items where..., 

これがアイテム {A、B、C、D} を返すとしましょう。2 番目のクエリは、呼び出し元のユーザーがアクセスできるアイテムを除外します。

var clientResult = from ci in fullResult where (privilege's and schedule's are true)

このダニの結果は {A, C } となり、返されます。クライアント側の結果は次のとおりです。クライアントがアクセスできるアイテムのリストのみが表示されます。検索を間違えたのか、それともアイテムが現在入手できないのかがわからないため、これは面倒な場合があります。

私ができるようにしたいのは、可能なすべての結果をクライアント {A、B、C、D} に表示することですが、この場合は B と D を使用不可としてフラグします。

私のエンティティには、使用できるプロパティ isReadOnly が既にあります。

除外するだけでなく、残りの結果を読み取り専用としてフラグを立てるクエリを作成できますか? 理想的な結果は {A, B.isREADOnly=true, C, D.isReadOnly=true} です。

それとも、実行可能な限界に達したので、結果のリストを返す別のクラスを作成して、従来の WCF Web メソッドを作成する必要がありますか?

PS: この 'isReadOnly' プロパティはこれにのみ使用されます。DB で変更されてもかまいません。

ポインタをありがとう

アンドレアス

4

1 に答える 1

1

もし私があなただったら、あなたのサービスからエンティティを直接返すのではなく、ReadOnly プロパティを持つものにマップすることを検討します。たとえば、エンティティが次の場合:

public class A
{
    public string Name { get; set; }
}

次に、次のようなデータ コントラクトを作成できます。

[DataContract]
public class AExtra
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public bool IsReadOnly { get; set; }
}

これが意味することは、クエリでこれを行うことができるということです:

var res = from a 
          in Items 
          where (...whatever your original logic is) 
          select new AExtra
            {
                Name = a.Name,
                IsReadOnly = (...put your logic for determining ReadOnly in here)
            };

そして、サービス操作から res を返します。

単なる意見ですが、エンティティをサービスから直接送信するのではなく、このようなことを行うのが好きです.

于 2011-12-16T07:18:36.737 に答える