コード例 #1
0
        public static List<object> LookupIds(SqlConnection cnn, IEnumerable<object> items, string lookupSql)
        {
            var rval = new List<object>();
            if (items.Count() == 0) return rval;

            // safe due to the long cast (not that it matters, it runs read only) 
            string list = String.Join(" , ",
                                      items.Where(i => i != null && i is int).Select(i => ((int) i).ToString()).ToArray());
            if (list == "")
            {
                return items.ToList();
            }

            StringBuilder query = new StringBuilder()
                .Append(lookupSql)
                .Append("( ")
                .Append(list)
                .Append(" ) ");

            var linkMap = new Dictionary<long, object>();
            using (SqlCommand cmd = cnn.CreateCommand())
            {
                cmd.CommandText = query.ToString();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var info = new MagicResult
                        {
                            Id = reader.GetInt32(0),
                            Title = reader.IsDBNull(1) ? "unknown" : reader.GetString(1)
                        };

                        linkMap[info.Id] = info;
                    }
                }
            }


            foreach (object item in items)
            {
                if (item == null || !(item is int))
                {
                    rval.Add(item);
                }
                else
                {
                    try
                    {
                        rval.Add(linkMap[(int) item]);
                    }
                    catch
                    {
                        // this is exceptional
                        rval.Add(item);
                    }
                }
            }

            return rval;
        }
コード例 #2
0
        public static List <object> LookupIds(SqlConnection cnn, IEnumerable <object> items, string lookupSql)
        {
            var rval = new List <object>();

            if (items.Count() == 0)
            {
                return(rval);
            }

            // safe due to the long cast (not that it matters, it runs read only)
            string list = String.Join(" , ",
                                      items.Where(i => i != null && i is int).Select(i => ((int)i).ToString()).ToArray());

            if (list == "")
            {
                return(items.ToList());
            }

            StringBuilder query = new StringBuilder()
                                  .Append(lookupSql)
                                  .Append("( ")
                                  .Append(list)
                                  .Append(" ) ");

            var linkMap = new Dictionary <long, object>();

            using (SqlCommand cmd = cnn.CreateCommand())
            {
                cmd.CommandText = query.ToString();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var info = new MagicResult
                        {
                            Id    = reader.GetInt32(0),
                            Title = reader.IsDBNull(1) ? "unknown" : reader.GetString(1)
                        };

                        linkMap[info.Id] = info;
                    }
                }
            }


            foreach (object item in items)
            {
                if (item == null || !(item is int))
                {
                    rval.Add(item);
                }
                else
                {
                    try
                    {
                        rval.Add(linkMap[(int)item]);
                    }
                    catch
                    {
                        // this is exceptional
                        rval.Add(item);
                    }
                }
            }

            return(rval);
        }