سؤال

لدي بعض العناصر التي تسمى معلق والتي يمكن إنشاؤها والاشتراك في. عندما يتم إنشاؤها، يكون لديهم نطاق 1: خاص أو 2: الجمهور. يمكن الاشتراك في المؤشرات العامة من قبل أي شخص ويمكن الاشتراك في معتمد من قبل دعوة المالك.

أريد استخدام LinQ للحصول على المؤشرات التي تم إنشاؤها بواسطة مستخدم (أي: مع معرف مالك معين) والتي تم الاشتراك في [1] عام [2] على المستخدم الحالي.

TickerUser       Ticker
==========       ======
TickerUserId <-- TickerId
TickerId         OwnerId
UserId           ScopeId

public IQueryable<Ticker> GetTickersByOwnerAll(int ownerId) {
    return from ticker in db.Tickers
           where ticker.OwnerId == ownerId
           select ticker;
}
/// THIS PART IS INCORRECT -- DO NOT USE
public IQueryable<Ticker> GetTickersByOwnerVisible(int ownerId) {
    int currId = CurrentUser.GetCurrentUser().ID;
    return GetTickersAll(ownerId)
           .Where(t => t.ScopeId == 2)
           .Where(t => t.TickerUsers.Where(tu => tu.UserId == currId));
}

هذا السطر الأخير غير صحيح ولكن يمكنك معرفة المكان الذي كنت أحاول الذهاب إليه. أنا جديد جدا على LINQ لذلك لا أفكر في الأمر بالطريقة الصحيحة حتى الآن. هل أنا على خطأ؟

هل كانت مفيدة؟

المحلول

db.Tickers.Where(t =>
    // The ticker is public...
    (t.ScopeId == 2)
    // ...or any of the ticker users is the current user.
    || t.TickerUsers.Any(tu => tu.UserId == currId))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top