2

我有两个表,FruitInventoryPeachInventory,它们有以下列:

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 的一部分,但我想知道如何使用返回布尔值的连接在一个查询中进行授权。

函数签名将是:

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 回答