سؤال

في ado.net/sqlclient، سأفعل شيئا مثل هذا:

SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234

... وإطلاق النار عليه باستخدام التنفيذي لإرجاع قيمة العد - للحصول على فحص بسيط إذا كان هناك شيء ما.

كيف يمكنني أن أفعل نفس الشيء باستخدام LinqtosQL؟

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

المحلول

if (context.SomeTable.Any(row => row.SomeKey == 1234))
{
    DoStuff();
}

يمكنك أيضا استخدام Count().

if (context.SomeTable.Count(row => row.SomeKey == 1234) > 0)
{
    DoStuff();
}

ولكن هذا يتطلب دائما الذهاب من خلال جميع الصفوف حين Any() يمكن العودة بعد الصف الأول المطابق - هكذا Any() قد يكون أفضل أداء.

نصائح أخرى

تذكر أن LINQ إلى SQL يتم تأجيل التنفيذ، مما يعني، الاستعلام فقط ينفذ فعلا عند الوصول إلى المجموعة. لذلك:

var q = (from p in db.SomeTable
        where p.SomeKey == 1234
        select p).Count();

سوف تتحول إلى عدد محدد () على جانب SQL من الأشياء.

إذا كنت تبحث لمعرفة ما إذا كان هناك شيء ما، فيمكنك استخدام أي وظيفة:

if (context.SomeTable.Any(i => i.SomeKey == 1234))
{
    return true;
}

أو إذا كنت تريد بالفعل معرفة هذا العدد، فيمكنك استخدام وظيفة حيث وظيفة العد:

context.SomeTable.Where(i=> i.SomeKey == 1234).Count();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top