【发布时间】:2013-09-05 12:54:23
【问题描述】:
我有一个要过滤的 TransportType 列表 应用程序应该将用户选择与此列表进行比较,然后只返回他选择的应该在定义列表中的内容
private static readonly string[] ValidTransportType = new string[]
{
"Cars",
"Airplans",
"Audi",
"BMW",
"Airbus A333",
"Boing 747",
};
public static IEnumerable<string> GetSelectedTypes(IEnumerable<string> userSelection )
{
var list = (from transport in ValidTransportType
where userSelection.Contains(transport)
select transport).ToList();
return list;
}
例如:如果用户选择“Car”、“Porsche”,那么结果将只有“Car”,因为没有定义 porsche。
我的问题是,如何修改 Linq 查询以执行以下操作: 如果用户选择“Cars”、“Audi”、“BMW”,则查询返回 Cars,因为汽车包括 BMW 和 AUDI,如果用户选择“Audi”和“BMW”,则应用程序将返回“Audi”和“BMW”,但不返回“汽车”,因为它没有被选中,如果用户选择了“宝马”、“奥迪”、“飞机”、“波音 747”,那么应用程序应该返回“宝马”、“奥迪”、“飞机”的列表,而不是“波音” 747”,因为飞机包括“波音 747”
有什么想法吗?
编辑:
请注意,要比较的类型和类型在运行前是未知的,两者都来自外部文件,例如:在我的示例中,我放置了汽车,但它可以是动物、技术、人......等等,这就是为什么我无法预先预测类型并创建类。
【问题讨论】:
-
在您当前的形式中,您在 Cars -> Audi、BMW 之间没有关系。考虑一个基类
Cars,其子类为 BMW、Audi,或者一个字典结构,其中 BMW 和 Audi 具有 Car 的值,类似这样。 -
@Habib 感谢您的回复,问题是输入来自外部 csv 文件,要比较的列表也来自外部文件。它可以是汽车、动物等等,但总是有一个抽象类型,它是文件中每一行的第一个单词(汽车、飞机、动物……等)
-
那么我建议使用
Dictionary<string,string>将每个项目作为键和值作为它们的类型。稍后您可以通过类型访问它们,但您必须在对象中建立关系才能获取相关数据。 -
谢谢@Habib,其实这就是我正在做的,我正在使用字典
> 其中 List 是我要过滤的输入跨度>