【问题标题】:Assigning values in group of Labels by using LINQ使用 LINQ 在标签组中分配值
【发布时间】:2014-04-14 17:31:58
【问题描述】:

我想检查数组(元组)及其名称(键)条件,并使用 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

在上面的代码中,我在 objects 上将 Name 和 Value 作为 Item1 和 Item2 。现在我想用国家代码检查 Item1。如果国家代码与 Item1 匹配,那么我需要将相应的 Item2 值分配给标签。我们需要对元组 (Item1,Item2) 中的所有项目执行此操作。 我们如何使用 LINQ 做到这一点?

【问题讨论】:

  • 您是否正在查找某个国家/地区代码(填写某个Label),或者您是否正在为每个国家/地区代码创建元素?如果你能做一些事情来展示你将如何使用你想要的代码,我会非常澄清一些事情,比如 string resultingValue = FunctionIWant(..);foreach (var tuple in FunctionIWant(..)) ...

标签: c# arrays linq


【解决方案1】:
myLabel.Text = ( object.Exists(x=>x.Item1 == countryCode)? objects.FirstOrDefault(x=>x.Item1==countryCode).Item2 : ""; 

【讨论】:

  • 哇!伟大的!我应用了您的代码及其工作。非常感谢。
【解决方案2】:

试一试单个语句:

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;

【讨论】:

    【解决方案3】:

    如果您有国家/地区代码列表,那么也许您想加入结果。如果您正在使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2020-12-13
      • 2012-03-11
      相关资源
      最近更新 更多