我需要考慮多個條件才能獲得價值。 我的意思是,如果所有條件都是真的,必須給我一個過濾的答案。 或者其中一個是真的,其餘都是假的... 所以我需要寫所有的可能性? 如果(一個& b &Ç& d)否則如果(一個& b & C)否則如果(一個&ç& d)否則如果(B &Ç& d)否則如果(一個& B)否則如果(一個& c)...等等:)))有沒有更簡單的方法來做到這一點?多個條件Linq擴展
public List<ProductReqNoDate> GetRequestsQuery(string departmant, int reqStateID, string firstDate, string lastDate, string productName)
{
var db = new requestDBEntities();
bool dp = !string.IsNullOrEmpty(departmant);
bool pr = !string.IsNullOrEmpty(productName);
bool tm = !string.IsNullOrEmpty(firstDate) && !string.IsNullOrEmpty(lastDate);
bool rs = reqStateID > 0 ? true : false;
var query = (from r in db.requests
select new ProductReqNoDate
{
departmant = r.departmant,
reqNo = r.reqNo,
reqDate = r.reqDate,
productName = (from p in db.products where p.reqNo == r.reqNo select p.productName).FirstOrDefault()
}).ToList();
if (dp & pr & tm & rs)
{
var rState = (from ta in db.reqStates
where ta.reqStateID == reqStateID && ta.isActive == true
select ta.reqNo).ToList();
var prName = (from p in db.products where p.productName.Contains(productName) select p.reqNo).ToList();
DateTime dtfirstDate = Convert.ToDateTime(firstDate);
DateTime dtlastDate = Convert.ToDateTime(lastDate);
return query.Where(
r => rState.Contains(r.reqNo) //find by Request State
&& r.departmant == departmant //find by Departmant
&& (r.reqDate >= dtfirstDate && r.reqDate <= dtlastDate) //find by Date
&& prName.Contains(r.reqNo) //Find By Product Name
).ToList();
}
else if (dp & pr & tm) { /*return query.Where(...} */}
else if (pr & tm & rs) { /*return query.Where(...} */}
else if (dp & pr && rs) { /*return query.Where(...} */}
else if (dp & pr) { /*return query.Where(...} */}
//else if ...etc
}
它就像一個魅力!非常感謝您花時間幫助我。 – blackraist 2012-01-06 15:06:58
這不是第一次從主表中引出所有100萬個項目,然後在應用程序中應用過濾器? 。 。 。或者如果我們要運行SQL事件探查器,我們會看到數據庫被打上了應用的過濾器,只有符合過濾條件的行纔會返回到應用程序(例如,只有100行中的50行符合我們的標準) ? – 2012-09-23 15:21:13
@AshishAnand因爲Linq使用延遲執行,直到調用'.ToList()',查詢纔會被執行。 – cadrell0 2012-09-24 18:21:19