考虑以下
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中重构/编写代码(一些常见的方法,只传递属性名称,并按照那样过滤记录)或者这是做同样的正确方法?
需要帮助。
由于
答案 0 :(得分:5)
也可以在where子句
中添加内联lstItem.ItemsSource =
(from item in Items
where (test == "S" ? item.Property1 == "SomeValue" : item.Property2 == "SomeOtherValue")
select item);
答案 1 :(得分:4)
您可以在if语句中链接命令。 E.g:
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");
}
答案 2 :(得分:3)
我喜欢:
lstItem.ItemsSource = Items.Where(type == "S" ?
item => item.Property1 == "SomeValue":
item => item.Property2 == "SomeOtherValue");
答案 3 :(得分:2)
好吧,你可以先将表达式归结为:
Func<Items, bool> expr;
if(type== "S")
{
expr = (item => item.Property1 == "SomeValue");
}
else
{
expr = (item => item.Property2 == "SomeOtherValue");
}
var items = Items.Where(expr);
当然,游戏计划真的是让它成为一个单一的状态网络,但这让我觉得它更易于管理:)
吉姆