2

と の 2 つのテーブルがFruitInventoryありPeachInventory、次の列があります。

FruitInventory 
FruitID | UserID | ....

PeachInventory
PeachID | FruitID | ...

ユーザーが PeachID の FruitID で承認されているかどうかに基づいて、特定の PeachID へのアクセスが承認されているかどうかをテストしたいと考えています。

彼が FruitID で承認されているかどうかをテストするために、現在、次のようなことを行っています。

public bool GetUserAuthorizedOnFruitID(int TheUserID, long TheFruitID)
{
   using (MyDataContext TheDC = new MyDataContext())
   {
      bool IsAuthorized = false;

      IsAuthorized = TheDC.FruitInventory
                          .Any(f => f.FruitID == TheFruitID && 
                                     f.UserID == TheUserID);

      return IsAuthorized;
   }
}

このクエリの後に実行され、ThePeachID が TheFruitID の一部であるかどうかを確認する 2 番目のクエリを実行できることはわかっていますが、ブール値を返す結合を使用して、1 つのクエリで承認を行う方法を考えていました。

関数のシグネチャは次のようになります。

public bool GetUserAuthorizedOnPeachID(int TheUserID, long ThePeachID)

ありがとう。

4

3 に答える 3

2

あなたが持っているものに基づいて、次のスキーマを使用します。

ここに画像の説明を入力

この関数/クエリを使用できます。

public bool GetUserAuthorizedOnPeachId(int userid, int peachId)
{
    using(var context = new MyDataDataContext())
    {
        bool isAuthorized = false;
        isAuthorized = (from p in context.PeachInventories.Where(p => p.PeachId == peachId)
                                    join f in context.FruitInventories.Where(f => f.UserId == userid) on p.FruitId equals f.FruitId select p).Any();

        return isAuthorized;

    }
}

LINQ でチェーンを次のように使用することもできます。

public bool GetUserAuthorizedOnPeachIdUsingAChainQuery(int userid, int peachId)
{
    using (var context = new MyDataDataContext())
    {
        bool isAuthorized = false;

        isAuthorized = context.PeachInventories.Where(p => p.PeachId == peachId)
                        .Join(context.FruitInventories.Where(f => f.UserId == userid), p => p.FruitId, f => f.FruitId, (p, f) => f).Any();

        return isAuthorized;

    }
}
于 2012-12-18T21:12:26.410 に答える
1

メモリからこれを行う:

IsAuthorized = (from f in TheDC.FruitInventory
                join p in TheDC.PeachInventory on p.FruitID equals f.FruitID
                where f.UserID == TheUserID
                   && p.PeachID == ThePeachID
                select p.PeachID).Any()

これは、フルーツ ID のフルーツ インベントリに参加することで、ユーザーが特定の桃にアクセスできるかどうかを確認します。

于 2012-12-18T21:05:52.723 に答える
1

これは、チェーン内の linq クエリのソリューションです。

bool exists = TheDC.PeachInventory.Join(TheDC.PeachInventory, 
                             peach=> peach.FruitID,
                             fruit=> fruit.FruitID,
                             (peach, fruit) => fruit).Any(f => f.FruitID == TheFruitID &&                                                         
                                                          f.UserID == TheUserID)
于 2012-12-18T21:13:37.403 に答える