Самый быстрый способ получить одно значение из EntityCollection - PullRequest
0 голосов
/ 16 января 2019

У меня есть коллекция сущностей, которую я преобразовываю в список следующим образом:

var List = Lines.Entities.Where(p =>
                    p.GetAttributeValue<OptionSetValue>("new_time").Value == 100000003).Select(e =>
                    new {

                        group = e.GetAttributeValue<OptionSetValue>("new_group"),
                        desc = e.GetAttributeValue<string>("new_desc"),
                        numbers = new Dictionary<string, int>()
                            {
                                {"monday", e.GetAttributeValue<int>("new_mondayunits") },
                                {"tuesday", e.GetAttributeValue<int>("new_tuesdayunits") },
                                {"wednesday", e.GetAttributeValue<int>("new_wednesdayunits")},
                                {"thursday", e.GetAttributeValue<int>("new_thursdayunits") },
                                {"friday", e.GetAttributeValue<int>("new_fridayunits") }
                            }

                    }).ToList();

Я получаю значение в день, который я хочу, вот так:

var value = List.Where(e => e.group == group && e.desc == desc).Select(e => e.numbers["monday"]);

Мое намерение состоит в том, чтобы извлечь значения из EntityCollection максимально быстрым способом, поскольку значения вызываются из цикла for. Я не уверен, помогает ли преобразование коллекции сущностей в список. Вот коллекция сущностей:

                    string fetchContractLines = @"  
                        <fetch version='1.0' output-format='xml-platform' mapping='logical'>
                            <entity name='new_contractline'>
                                <attribute name='new_group' />
                                <attribute name='new_desc' />
                                <attribute name='new_time' />
                                <attribute name='new_mondayunits' />
                                <attribute name='new_tuesdayunits' />
                                <attribute name='new_wednesdayunits' />
                                <attribute name='new_thursdayunits' />
                                <attribute name='new_fridayunits' />
                                <filter type='and'>
                                    <condition attribute='statecode' operator='eq' value='0' />
                                    <condition attribute='new_contractid' operator='eq' value='{" + contractId.ToString() + @"}' />
                                    <condition attribute='new_group' operator='not-null' />
                                    <condition attribute='new_time' operator='not-null' />
                                    <condition attribute='new_desc' operator='not-null' />
                                </filter>
                            </entity>
                        </fetch>";


                    EntityCollection Lines = service.RetrieveMultiple(new FetchExpression(fetchContractLines));

Причина, по которой мне нужна скорость, заключается в том, что я превышаю 2-минутный лимит на выполнение плагина и думал, что могу сократить количество времени, которое требуется, уменьшив время поиска.

1 Ответ

0 голосов
/ 16 января 2019

Вместо этого я использовал словарь, но все еще не уверен, существует ли более быстрый способ получения значения из коллекции:

var Lookup = Lines.Entities.Where(e => e.GetAttributeValue<OptionSetValue>("new_time").Value == 100000001).Select(r => new
                    {
                        group = r.GetAttributeValue<OptionSetValue>("new_group").Value,
                        desc = r.GetAttributeValue<string>("new_desc"),
                        numbers = new Dictionary<string, int>()
                        {
                            {"monday", r.GetAttributeValue<int>("new_mondayunits") },
                            {"tuesday", r.GetAttributeValue<int>("new_tuesdayunits") },
                            {"wednesday", r.GetAttributeValue<int>("new_wednesdayunits") },
                            {"thursday", r.GetAttributeValue<int>("new_thursdayunits") },
                            {"friday", r.GetAttributeValue<int>("new_fridayunits") }
                        }
                    }).ToDictionary(t => t.group.ToString() + t.desc, t => t.numbers);
var quan = Lookup.ContainsKey(key) ? amLookup[key][currentday] : 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...