ठीक है, यह पूरी तरह से स्पष्ट आप क्या चाहते हैं नहीं है, लेकिन आप के लिए कोशिश कर रहे हैं केवल जोड़ने जहां मानकों जो गैर-शून्य कर रहे हैं के लिए खंड, तुम कर सकते हो:
public IQueryable<Student> FindByAllStudents
(int? id, string name, int? courseID, bool? isActive)
{
IQueryable<Student> query = db.Student;
if (id != null)
{
query = query.Where(student => student.ID == id.Value);
}
if (name != null)
{
query = query.Where(student => student.Name.Contains(name));
}
if (courseID != null)
{
query = query.Where(student => student.CourseID == courseID.Value);
}
if (isActive != null)
{
query = query.Where(student => student.IsActive == isActive.Value);
}
return query;
}
मैं प्रयास नहीं किया है कि, और यह संभव है कि LINQ से SQL को कोड द्वारा भ्रमित मूल्य प्रकार के मान को खोजने के लिए भ्रमित हो जाएगा। आप इस तरह कोड लिखने की आवश्यकता हो सकती है:
if (courseID != null)
{
int queryCourseID = courseID.Value;
query = query.Where(student => student.CourseID == queryCourseID);
}
यह सरल रूप की कोशिश कर रहा लायक है पहले हालांकि :)
बेशक
, यह सब एक सा परेशान हो जाता है। एक सहायक विस्तार विधि जीवन अधिक संक्षिप्त कर सकता है:
public static IQueryable<TSource> OptionalWhere<TSource, TParameter>
(IQueryable<TSource> source,
TParameter? parameter,
Func<TParameter, Expression<Func<TSource,bool>>> whereClause)
where TParameter : struct
{
IQueryable<TSource> ret = source;
if (parameter != null)
{
ret = ret.Where(whereClause(parameter.Value));
}
return ret;
}
फिर आप इसे इस तरह का उपयोग करेंगे:
public IQueryable<Student> FindByAllStudents
(int? id, string name, int? courseID, bool? isActive)
{
IQueryable<Student> query = db.Student
.OptionalWhere(id, x => (student => student.ID == x))
.OptionalWhere(courseID, x => (student => student.CourseID == x))
.OptionalWhere(isActive, x => (student => student.IsActive == x));
if (name != null)
{
query = query.Where(student => student.Name.Contains(name));
}
return query;
}
इस तरह एक उच्च आदेश समारोह का उपयोग करना भ्रामक हो सकता है यदि आप वास्तव में सहज नहीं हैं हालांकि, इसके साथ, यदि आप इस तरह के कई प्रश्न नहीं कर रहे हैं तो आप लंबे लेकिन सरल कोड के साथ रहना चाहेंगे।
धन्यवाद! पहले समाधान के लिए हम भी उपयोग कर सकते हैं अगर (id.HasValue) {id.Value} – Vikas
का उपयोग करने से आप मुझे पूर्ण टेक्स्ट खोज का उपयोग करने के लिए मार्गदर्शन कर सकते हैं? – Vikas
हैस्वालू का उपयोग करने के बराबर है! = शून्य। मुझे LINQ के साथ पूर्ण पाठ खोज का उपयोग करने के बारे में पता नहीं है, मुझे डर है। –