使用LINQ在标签组中分配值

时间:2014-04-14 17:31:58

标签: c# arrays linq

我想检查值的数组(元组)及其名称(键)条件,并使用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做到这一点?

3 个答案:

答案 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