簡體   English   中英

重構LINQ查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM