5

私を助けてください。.Where() クエリ メソッドで 2 つの GUID を比較してみます。しかし、コンパイルエラーが発生します。エラー 1 演算子 '>' は、型 "System.Guid" および "System.Guid" のオペランドには適用できません

Guid startUser = ////Here I get user by url id param
List<Friends> friends = Common.DataContext.Friends.Where(u => u.FriendID > startUser).Take(5);
4

3 に答える 3

4

そして:

u.FriendID.CompareTo(startUser) > 0

?

于 2013-01-13T16:11:06.420 に答える
0

これは古い質問であることは知っていますが、このデータケースは以前に見たことがあり、将来誰かに関連する可能性があります. これは、何らかの理由で一意の識別子でテーブル (物理的に編成され、デフォルトで主キー) をクラスター化している場合に関連する可能性があります。テーブルのバッチ読み取りまたはページングが必要な場合は、次のような SQL クエリになる可能性があります。

SELECT TOP (@batchsize)
    *
FROM myTable
WHERE UserId > @previousBatchUserId

これは一般的に最適な設計ではなく、ご覧のとおり、LINQ-to-SQL では機能しません。また、行が追加された後に同じクエリを実行すると、バッチの内容が変わります。CreatedDate(time) 列がある場合は、代わりにそれで順序付けする方がはるかに優れています。または、作成日列を最初の条件として使用し、次に != GUID をチェックします (同じスタンプで作成されたものが複数ある場合)。理想的には、サロゲート ID 列 (およびその上にクラスター) を追加し、目的の GUID に対応する ID よりも大きい ID をフィルター処理できます。

次に、次のようになります。

Guid startUser = //some guid
int startUserId = Common.DataContext.Friends.Single(u => u.FriendID == startUser).Id;
List<Friends> friends = Common.DataContext.Friends.Where(u => u.Id > startUserId);
于 2016-12-02T15:27:12.197 に答える
-2

大なりまたは小なりを Guid に適用しても意味がありません。

0f8fad5b-d9cb-469f-a165-70867728950e7c9e6679-7425-40de-944b-e07fc1f90ae7

ガイドが 2 つありますが、どちらが大きいですか? - を削除して、HEX の合計を計算しますか? または - の間にHEXの合計を追加するのはどうですか?

それは単に行われていないだけです(そうなる可能性はありますが)

ただし、論理的な == と != を適用することは理にかなっています。Guid 構造体は == および != 演算子をオーバーロードするため、それらを使用すると、文字列値を簡単に比較することもできます。

var isEqual = guid.ToString().Equals(otherGuid.ToString());

于 2013-01-13T16:14:30.400 に答える