在词典LINQ中首次出现

lig*_*hty 1 c# linq

我有以下代码,即使在代码中第一次出现后它仍然保持循环.我想停下来,但我不能将Any我的情况

    public List<FieldConfiguration> GetListOfProvisionsForBenefits(Dictionary<int, string> benefits)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("SELECT ProvisionID ,BenefitID,ProvisionName, BPROV_Flags FROM BenefitProvisions WHERE");
        int intSQLvar = 0;
        string strSeperator = string.Empty;
        foreach (KeyValuePair<int, string> benefit in benefits)
        {

            sb.AppendFormat(" {0} BenefitID=@benerfit{1}", strSeperator, intSQLvar);
            intSQLvar++;
            strSeperator = "OR";
        }

        SqlConnection con = new SqlConnection(m_strDBConnectionString);
        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = sb.ToString();
        intSQLvar = 0;
        foreach (KeyValuePair<int, string> benefit in benefits)
        {
            cmd.Parameters.Add(string.Format("@benerfit{0}", intSQLvar), SqlDbType.Int, 32).Value = benefit.Key.ToString();
            intSQLvar++;
        }

        DataSet ds = new DataSet();
        try
        {
            con.Open();
            sqlDataAdapter.SelectCommand = cmd;
            sqlDataAdapter.Fill(ds);
        }
        finally
        {
            if (con != null)
            {
                con.Close();
                con = null;
            }
        }
        List<ProvisionDetails> lstProvisions = new List<ProvisionDetails>();

        if (ds != null && ds.Tables[0].Rows.Count > 0)
        {
                lstProvisions = (from r in ds.Tables[0].AsEnumerable()
                                select new ProvisionDetails()
                        {
                            ID = r.Field<int>("ProvisionID"),
                            Name = r.Field<string>("ProvisionName"),
                            BenefitID = r.Field<int>("ProvisionID"),
                            OptionValue =  r.Field<int>("ProvisionID") 
                        }).ToList();

            if (benefits.Count == 1)
            {
                return (from p in lstProvisions
                        select new FieldConfiguration()
                        {
                            Name = p.Name,
                            ProvisionFieldID = p.ID.ToString(),
                            FieldType = Configuration.SyncapayPlus.FieldType.Provision,
                            Caption = (from b in benefits 
                                           where(b.Key == p.BenefitID)
                                       select string.Format("{0}_{1}", b.Value, p.Name)).ToString() // to do change caption  benefitname_provisionName
                        }).ToList();
            }
            else
            {
                return (from p in lstProvisions.GroupBy(x => x.Name)
                .Where(y => y.Count() > 1)
               .SelectMany(z => z)
                        select new FieldConfiguration()
                        {
                            Name = p.Name,
                            ProvisionFieldID = p.ID.ToString(),
                            FieldType = Configuration.SyncapayPlus.FieldType.Provision,
                            SourceOption = p.OptionValue.ToString(),
                            Caption =
                            (from b in benefits
                             where (b.Key == p.BenefitID)
                             select string.Format("{0}_{1}", b.Value, p.Name)).ToString() // to do change caption  benefitname_provisionName
                        }).ToList();
            }


        }
        return null;

    }
Run Code Online (Sandbox Code Playgroud)

我想在本节中应用ANY,我会得到标题; 当我找到第一个好处时,我希望它退出并分配它:

Caption =
     (from b in benefits
     where (b.Key == p.BenefitID)
     select string.Format("{0}_{1}", b.Value, p.Name)).ToString() // to do change caption  benefitname_provisionName
                           }).ToList();
            } 
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

如果您知道总会有至少一个这样的好处 - 或者您不介意使用占位符来获取缺失值 - 您可以使用以下内容:

Caption = string.Format("{0}_{1}",
                        benefits.Where(b => b.Key == p.BenefitID)
                                .Select(b => b.Value)
                                .FirstOrDefault(), // Or First
                        p.Name);
Run Code Online (Sandbox Code Playgroud)

我建议你不要混淆和匹配你的查询表达式和点符号这么多 - 它现在很混乱.