我現在有看起來有點像這樣:如何在LINQ中創建動態選擇表達式?
if(userLikesBananas)
{
return from fruit in basket
select new Fruit
{
AteBanana = Bowl.Any(b => b.OwnedBy == user && b.Contains(fruit) && fruit.Type == FruitType.Banana),
...
...
//lots of properties
...
}
}
else
{
return from fruit in basket
select new Fruit
{
AteBanana = Bowl.Any(b => b.Contains(fruit)),
...
...
//lots of properties
...
}
}
不可否認的例子,使絕對沒有任何意義,但原則是,我想改變基於任意條件的性質選擇的條件。現在選擇語句重複。
現在是時候了,我需要添加依賴於標準的依賴器。我不想在4個不同的情況下,財產狀況稍有不同。
我想要做的,是這樣的:
Func<Fruit, bool> fruitFunc = f => false;
if(userLikesBananas)
{
fruitFunc = f => Bowl.Any(b => b.OwnedBy == user && b.Contains(f) && f.Type == FruitType.Banana);
}
else
{
fruitFunc = f => Bowl.Any(b => b.Contains(f));
}
return from fruit in basket
select new Fruit
{
AteBanana = fruitFunc(fruit)
...
...
//lots of properties
...
};
麻煩的是,是表達不能轉換爲SQL,因爲它包含一個動態調用。我曾嘗試在Expression
中包裝Func
,但似乎出現了同樣的問題。
所以問題是,我該如何避免複製和粘貼?
這種方法將意味着整個表達式將被轉換爲SQL,'userLikesBananas'將被傳入。我正在尋找這意味着表達式在被轉換爲sql之前被調整。使用if語句將會產生一個更清晰的查詢,但是這是個好主意,謝謝。 – SteadyEddi 2010-07-16 13:29:09