Получить атрибут SimpleDB, не просматривая все атрибуты для элемента - PullRequest
4 голосов
/ 02 марта 2012

Я хотел бы проверить атрибут с использованием C # и SimpleDB без необходимости циклически перебирать все атрибуты для определенного элемента.

Например, если у меня есть мой домен: «MyDomain», и у меня есть триатрибуты для элемента (элемент: george@george.com).

Три атрибута:

ИмяЗарегистрироватьсяконтакты

Так, например, это мои данные:

MyDomain (домен)george@george.com (предмет)Джордж Доу (атрибут)3-1-12 (атрибут)mike@mike.com (атрибут)

Проблема в том, что мой код перебирает все 3 атрибута в элементе george@george.com.Например;когда я запускаю свой код, вывод:

Контакты не найденыКонтакты не найденыКонтакт: mike@mike.com

, потому что мой код перебирает все 3 атрибута для элемента george@george.com.

Я хочу, чтобы мой код C # проверял только атрибут «Контакты» и НЕ просматривал все атрибуты элемента george@george.com.

Может кто-нибудь показать мне, как это сделать?

AmazonSimpleDB sdb = AWSClientFactory.CreateAmazonSimpleDBClient();

            String selectExpression = "Select * From MyDomain Where Email = 'george@george.com'";
            SelectRequest selectRequestAction =
                new SelectRequest().WithSelectExpression(selectExpression);
            SelectResponse selectResponse = sdb.Select(selectRequestAction);

            if (selectResponse.IsSetSelectResult())
            {
                SelectResult selectResult = selectResponse.SelectResult;
                foreach (Item item in selectResult.Item)
                {

                    foreach (Amazon.SimpleDB.Model.Attribute attribute in item.Attribute)
                    {    
                        if (attribute.IsSetName())
                        {

                            if (attribute.Name == "Contact")
                            {
                                if (attribute.IsSetValue())
                                {
                                    Console.WriteLine("Contact: {0}", attribute.Value);
                                }
                            }
                            else
                            {
                                Console.WriteLine("No Contacts Found");
                            }   
                        }
                    }
                }
            }

Я хочу, чтобы он просто проверял атрибут «Контакты», чтобы увидеть, есть ли для него значение, а не перебирал все атрибуты.

Может кто-нибудь показать мне пример кода C # о том, как мне это сделать?Благодарю.РЕДАКТИРОВАТЬ: Я все еще хочу перебрать все «Контакты» в атрибуте «Контакты».Я просто не хочу перебирать все атрибуты, которые не имеют названия «Контакты».Атрибут «Контакты» может содержать более одного контакта, и мне все еще нужно получить все из этого атрибута.

Эта строка кода от Кена ниже:строковое значение = item.Attribute.First (a => a.Name == «Контакт»). Значение

останавливает зацикливание различных атрибутов, но возвращает только 1 контакт из атрибута «Контакты», даже если в атрибуте «Контакты» хранится более 1 контакта.

1 Ответ

2 голосов
/ 25 апреля 2012

Вы можете запустить Amazon simpleDB Query с атрибутом.

select <attribute_name> from <domain_name>

А Amazon SimpleDB будет возвращать только элементы, имеющие этот атрибут, и в ответ вы получите только этот атрибут, даже если элементы имеют другие атрибуты.

...