我想检查值的数组(元组)及其名称(键)条件,并使用LINQ将其值(值)分配给标签值。
这是我的代码,用于创建名称和值为(Item1和Item2)的元组:
var myString = "IND|001;TWN|002;USA|003;LDN|;MYS|005;";
var objects = myString.Split(';').Where(x=>!string.IsNullOrEmpty(x))
.Select (x => x.Split('|'))
.Select (x => Tuple.Create(x[0],x[1])).ToList();
Result:
IND 001
TWN 002
USA 003
LDN
MYS 005
在上面的代码中,我将Name和Value视为对象上的Item1和Item2。现在我想用国家代码检查Item1。如果国家/地区代码与Item1匹配,那么我需要将相应的Item2值分配给Label。我们需要为元组中的所有项(Item1,Item2)执行此操作。 我们如何使用LINQ做到这一点?
答案 0 :(得分:2)
myLabel.Text = ( object.Exists(x=>x.Item1 == countryCode)? objects.FirstOrDefault(x=>x.Item1==countryCode).Item2 : "";
答案 1 :(得分:0)
尝试单一声明:
string code = "IND";
var myString = "IND|001;TWN|002;USA|003;LDN|;MYS|005;";
var match = myString.Split(';')
.Where(x => !string.IsNullOrEmpty(x) && x.Contains('|') && x.Contains(code))
.Select(x => x.Split('|')[1])
.FirstOrDefault();
label.Text = (!String.IsNullOrEmpty(match)) ? match : String.Empty;
答案 2 :(得分:0)
如果您有国家/地区代码列表,那么您可能希望加入结果。如果您正在使用Web表单,则可以使用转发器控件构建标签
var myString = "IND|001;TWN|002;USA|003;LDN|;MYS|005;";
var objects = myString.Split(';').Where(x => !string.IsNullOrEmpty(x))
.Select(x => x.Split('|'))
.Select(x => Tuple.Create(x[0], x[1])).ToList();
var countryCodes = new List<string> {"CAN", "IND", "TWN", "USA"};
countryRepeater.DataSource = from countryCode in countryCodes
join @object in objects on
countryCode equals @object.Item1
select new {Code = countryCode, Value = @object.Item2};
countryRepeater.DataBind();
然后在你的表格中转发:
<asp:Repeater ID="countryRepeater" runat="server">
<ItemTemplate>
<asp:Label ID="countryCodeLabel" runat="server" Text='<%# Eval("Code") %>'></asp:Label>
<asp:Label ID="countryLabel" runat="server" Text='<%# Eval("Value") %>'></asp:Label>
<br />
</ItemTemplate>
</asp:Repeater>
会产生标签:
IND 001
TWN 002
美国003