2017-01-31 6 views
20

वहाँ if और else वर्गों में प्रश्नों गठबंधन करने के लिए कोई तरीका है?LINQ में सशर्त भविष्यवाणी करता है?

public List<MyClass> GetData(Category category, bool flag= true) 
{ 
    IQueryable<MyClass> result; 
    if (flag) 
    { 
     result = Session.All<MyClass>() 
        .Where(mc => mc.Col.Equals(category.ToString()) && mc.FLAG); 
    } 
    else 
    { 
     result = Session.All<MyClass>() 
        .Where(mc => mc.Col.Equals(category.ToString())); 
    } 

    return result.ToList(); 
} 

उत्तर

25

निश्चित रूप से।

result = Session.All<MyClass>() 
       .Where(mc => mc.Col.Equals(category.ToString()) && (!flag || mc.FLAG)); 

आप की अनुमति दी true परिणामों के एक मैट्रिक्स बनाकर फिर से लिखने के तर्क का निर्धारण कर सकते हैं:

▼ mc.FLAG ► flag 
      true  false 
true  valid valid 
false  invalid valid 

यहाँ आप देखते हैं कि हालत अगर flag गलत है मान्य है (दोनों true के लिए समानता) या mc.FLAG है true

मैं भी पहले ध्वज की जांच करने के लिए सलाह के बाद से है कि बेहतर प्रदर्शन करने विधेय है जाएगा। यह गलत पर यदि पहला परिणाम दूसरे की जांच रोक सकती हैं:

result = Session.All<MyClass>() 
       .Where(mc => (!flag || mc.FLAG) && mc.Col.Equals(category.ToString()); 
+0

कि साफ है। धन्यवाद! – devnull

+1

@devnull आपका स्वागत है। इसके लिए तर्क शामिल है। सही यूनिकोड वर्ण पाने के साथ एक छोटे से मुसीबत था :) –

+1

मैं जानता हूँ कि इस सवाल का जवाब देता है। बस उत्सुक, क्या आप ओपी में कोड को पठनीयता और (सीमांत) प्रदर्शन पर विचार करते हैं? – Jimmy

21

आप कर सकते हैं श्रृंखला Where सशर्त।

public List<MyClass> GetData(Category category, bool flag = true) 
{ 
    var result = Session.All<MyClass>() 
     .Where(mc => mc.Col.Equals(category.ToString())); 

    if (flag) { 
     result = result.Where(mc => mc.FLAG); 
    } 

    return result.ToList(); 
} 
संबंधित मुद्दे