// GET search?name=bank+name&state=UT&city=west+valley+city
 public IEnumerable<Bank> Get([FromUri]Search search)
 {
     var context = new BankEntities();
     var results = context.Banks.AsQueryable();
     if (!String.IsNullOrEmpty(search.Name))
     {
         results = results.Where(b => b.Name.Contains(search.Name));
     }
     if (!String.IsNullOrEmpty(search.State))
     {
         results = results.Where(b => b.State == search.State);
     }
     if (!String.IsNullOrEmpty(search.City))
     {
         results = results.Where(b => b.City == search.City);
     }
     return results;
 }
        public void Update(BankEntities context)
        {
            var currentVersion = context.Versions.Where(a => a.Type == "RoutingLookup").FirstOrDefault();
            if (currentVersion == null)
            {
                currentVersion = new Models.Version() { Type = "RoutingLookup", LastUpdateAttempt = DateTime.Now, LastUpdateSuccess = DateTime.Parse("01/01/1900") };
                context.Versions.Add(currentVersion);
            }
            else
            {
                currentVersion.LastUpdateAttempt = DateTime.Now;
            }

            if (DateTime.Now.Date > currentVersion.LastUpdateSuccess.Date)
            {
                //HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://www.fededirectory.frb.org/FedACHdir.txt");
                HttpWebRequest rq = (HttpWebRequest)WebRequest.Create("http://www.fededirectory.frb.org/updatesForACH.cfm");
                rq.Method = "POST";
                rq.ContentType = "application/x-www-form-urlencoded";
                byte[] bytedata = Encoding.UTF8.GetBytes("sinceDate=" + currentVersion.LastUpdateSuccess.ToString("MM/dd/yyyy"));
                rq.ContentLength = bytedata.Length;
                using (var requestStream = rq.GetRequestStream())
                {
                    requestStream.Write(bytedata, 0, bytedata.Length);
                    requestStream.Close();
                }

                using (var rs = (HttpWebResponse)rq.GetResponse())
                {
                    using (var stream = rs.GetResponseStream())
                    {
                        using (var readStream = new StreamReader(stream, System.Text.Encoding.GetEncoding("utf-8")))
                        {

                            var responseBuilder = new StringBuilder();
                            var bufferSize = 256;
                            Char[] read = new Char[bufferSize];
                            int count = readStream.Read(read, 0, bufferSize);

                            while (count > 0)
                            {
                                String str = new String(read, 0, count);
                                responseBuilder.Append(str);
                                count = readStream.Read(read, 0, bufferSize);
                            }
                            var response = responseBuilder.ToString();
                            var bankItems = response.Split(new string[] { "\r\n" }, StringSplitOptions.None);

                            var itemsAdded = 0;
                            var itemsModified = 0;
                            foreach (var bankItem in bankItems)
                            {
                                if (bankItem.Length >= 9)
                                {
                                    var updatedBank = context.ParseBank(bankItem);
                                    var existingBank = context.Banks.Find(updatedBank.RoutingNumber);
                                    if (existingBank == null)
                                    {
                                        itemsAdded++;
                                        context.Banks.Add(updatedBank);
                                    }
                                    else
                                    {
                                        itemsModified++;
                                        context.Entry<Bank>(existingBank).CurrentValues.SetValues(updatedBank);
                                    }
                                }
                            }
                            currentVersion.LastUpdateItemsAdded = itemsAdded;
                            currentVersion.LastUpdateItemsModified = itemsModified;
                            currentVersion.LastUpdateSuccess = DateTime.Now;
                            context.SaveChanges();

                            rs.Close();
                            readStream.Close();
                        }
                    }
                }
            }
        }
 // GET bank/011000015
 public Bank Get(string id)
 {
     var context = new BankEntities();
     return context.Banks.Find(id);
 }