我在.NET項目寫這樣的代碼:優化LINQ查詢,以避免重複枚舉
var v = ctx.Items
.Where(x => x.userid== user.userid)
.Select(e => new MyViewModel
{
Title = e.Title,
CurrentPrice = e.CurrenctPrice.Value,
ItemID = e.ItemID.ToString(),
Sales = e.Transactions.Where(p => p.TransactionDate >= intoPast && p.TransactionDate <= endDate).Sum(x => x.QuantityPurchased)
})
.Where(x => x.Sales > 0 && ((filterWord == "") || (filterWord != "" && x.Title.ToLower().Contains(filterWord.ToLower()))));
其中「CTX」是我對象上下文變量...
這是ViewModelClass,我使用:
public class MyViewModel
{
public string Title { get; set; }
public int Sales { get; set; }
public string ItemID { get; set; }
public double CurrentPrice { get; set; }
}
的事情,大多數錯誤我這裏是銷售物業......正如你可以看到我在SELECT語句設置它的值。這樣,我所有的數據每次都被列舉出來......
我在這裏想的是創建一個名爲「getsales()」的方法...然後在我的where語句中調用GetSales方法:
.Where(x=>X.GetSales(/*neccesary parameters here*/)...)
爲了避免多個枚舉...
但我真的不知道該怎麼辦呢?
有人可以幫助我在這裏?
嘿@Nkosi你爲什麼要刪除回覆,我只是要讀吧XD – User987
你能不能動的了'filter'部分查詢最初的'.Where'子句?此外,您不需要'filterWord!=「」'部分,因爲要執行的那部分代碼,'filterWord =='「''必須已經評估爲'false' –
@RufusL您的意思是這樣的: .Where(x => x.Sales> 0 &&((filterWord ==「」)||(x.Title.ToLower()。Contains(filterWord.ToLower())))); ? P.S.我沒有得到第一部分,你能否以答覆的形式答覆,以便我能看到你的意見? – User987