Как получить IQueryable Item для фильтрации по списку строк - PullRequest
0 голосов
/ 16 июня 2019

Я использую Odata в качестве моей службы, чтобы получить IQueryable класса для моей Kendo Grid. У меня есть список строк номеров элементов, и мне нужно отфильтровать один из моих классов IQueryable, чтобы отображать только номера элементов из класса, который находится в этом списке строк, и сохранять его в IQueryable.

Я уже пытался использовать Contains для того, чтобы отфильтровать номера элементов в списке, но я получаю сообщение об ошибке «Метод« Contains »не поддерживается». Мне также нужно сохранить IQueryable.

Ниже приведен код, с которым я работаю:

var service = RetailHelper.GetODataItemService();
var query = from a in service.ItemAssortment
            where a.Item_Nbr == itemNumber && a.AuditYear == 2018
            select a;
var newQuery = query.ToList();
var queryList = newQuery.Select(x => x.Assortment_Nbr.ToString()).Distinct().ToList();
//queryList now has the List of strings that I want to use as the filter

var itemQuery = from a in service.Items
                select a;
//I now need to filter itemQuery to only include all the Item Numbers that are in queryList. This is where my dilemma is.

var dsq = RetailerHelper.CreateDataServiceQuery<Item>(itemQuery, request);
//The above is where I will enter in the filtered itemQuery
var qor = dsq.IncludeTotalCount().Execute() as QueryOperationResponse<Item>
var result = new DataSoureResult() { Data = qor.ToList(), Total = Convert.ToInt32(qor.TotalCount) };
return result;

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Попробуйте присоединиться

var itemQuery = from a in service.ItemAssortment
                join b in service.Items
                  on b.Number == a.Assortment_Nbr
                where a.Item_Nbr == itemNumber && a.AuditYear == 2018
                select b;
0 голосов
/ 16 июня 2019

Вы можете начать с queryList вместо itemQuery:

var filtered = queryList.SelectMany(x=> itemQuery.Where(item => item.Number == x).ToList());
...