[英]Refactoring LINQ query
考慮以下
if(type== "S")
{
lstItem.ItemsSource = (from item in Items
where item.Property1 == "SomeValue"
select item);
}
else
{
lstItem.ItemsSource = (from item in Items
where item.Property2 == "SomeOtherValue"
select item);
}
可以看出,這兩個查詢之間的唯一區別僅在於屬性名稱(第一個是Property1 ,第二個是Property2 )
有沒有更好的方法在結構化的mannner中重構/編寫代碼(一些常見的方法,只傳遞屬性名稱,並按照那樣過濾記錄)或者這是做同樣的正確方法?
需要幫忙。
謝謝
如果在where子句中也可以添加內聯
lstItem.ItemsSource =
(from item in Items
where (test == "S" ? item.Property1 == "SomeValue" : item.Property2 == "SomeOtherValue")
select item);
您可以在if語句中鏈接命令。 例如:
var items = from item in Items
select item;
if(type== "S")
{
items = items.Where(item => item.Property1 == "SomeValue");
}
else
{
items = items.Where(item => item.Property2 == "SomeOtherValue");
}
或者甚至只是在你的orignal代碼中寫出更整潔的lambda結構:
if(type== "S")
{
lstItem.ItemsSource = Items.Where(item => item.Property1 == "SomeValue");
}
else
{
lstItem.ItemsSource = Items.Where(item.Property2 == "SomeOtherValue");
}
我喜歡:
lstItem.ItemsSource = Items.Where(type == "S" ?
item => item.Property1 == "SomeValue":
item => item.Property2 == "SomeOtherValue");
好吧,你可以先將表達式歸結為:
Func<Items, bool> expr;
if(type== "S")
{
expr = (item => item.Property1 == "SomeValue");
}
else
{
expr = (item => item.Property2 == "SomeOtherValue");
}
var items = Items.Where(expr);
當然,游戲計划真的是讓它成為一個單獨的狀態網絡,但是這讓我覺得它更易於管理:)
吉姆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.