在列表上放置一个匹配并获得不同的国家/地区名称

时间:2011-11-24 08:46:18

标签: c# linq sharepoint-2010 logic

在我的前端有2个选项来选择国家,一个是[Resident of:Single Select DropDown List],另一个是[Country of the Visited:Multiselect DropDown List],所有值都在SharePoint List中,首先是a选择字段,将另一个作为查找values (id#;#value,#id#;#value)

现在我有一个搜索页面,用户可以从国家/地区下拉列表中选择条件:为了加载下拉列表,我选择了Resident of field中的所有不同值,不知怎的,我需要从Country访问过的值获取 - 好吧,并将其作为不同的值加载到下拉列表中。

我无法想到从多选字段中提取不同值的逻辑,然后将其与常规选择字段值进行比较,如下所示:

   Resident of             Countries Visited

a) Canada                  Chile,Argentina,Russia.
b) Peru                    Canada,Russia,Spain,Germany.

现在在加载下拉列表时,我如何从上面的列表中获取不同的值。

2 个答案:

答案 0 :(得分:1)

试试这个:

string countries1 = "Chile,Argentina,Russia";
string countries2 = "Canada,Russia,Spain,Germany";
var countryLists = new List<string>() { countries1, countries2 };
var distinctCountries = countryLists.Select( s => s.Split(','))
    .SelectMany(list => list, (list, country) => country)
    .Distinct();

解释

  • 创建逗号分隔字符串的集合
  • 使用string.Split将其投影到字符串集合
  • 的集合中
  • 使用SelectMany将其展平为单个列表
  • 使用Disting删除重复项

我无法从问题中判断出您是否也希望将居民列表与此列表合并。如果您这样做,则最后需要Union(residentCountries)代替Distinct()

答案 1 :(得分:1)

简化@Mike Goodwin的回答:

string countries1 = "Chile,Argentina,Russia";
string countries2 = "Canada,Russia,Spain,Germany";
var countryLists = new List<string>() { countries1, countries2 };
var distinctCountries = string.Join(",", countryLists).Split(',').Distinct();

不确定这会回答这个问题。