Использование Linq to EF для поиска с использованием массива в качестве параметра поиска - PullRequest
0 голосов
/ 15 ноября 2018

Я уже прочитал и попробовал несколько ссылок отсюда, но ни одна из них не очень подходит.

У меня есть запрос, который в данный момент ищет с использованием числа или "||"пункты, которые мне нужно заменить на динамически назначенный список.Это может быть массив или список <>

Мой текущий код:

    var mainPull = (from c in cDb.DistributionStopInformations
                    join rh in cDb.DistributionRouteHeaders on c.Route_Code equals rh.Route_Code
                    where c.Created_By == null && c.Company_No == 1 &&
                   (c.Customer_No == 228 || c.Customer_No == 227) &&
                   (c.Branch_Id == "MEM" || c.Branch_Id == "TXK" || c.Branch_Id == "TUP" || c.Branch_Id == "LIT")
                   &&
                    c.Shipment_Type == "D" &&
                   (c.Datetime_Created > dateToSearch || c.Datetime_Updated > dateToSearch) &&
                   rh.Company_No == 1 &&
                   rh.Route_Date >= routeDateToSearch
                    orderby c.Unique_Id_No descending
                    select new
                    {
                        c.Datetime_Updated,
                        c.Datetime_Created,

Мне нужно что-то вроде этого (psedocode)

 string[] brancheSearchList = new string[] { "TUP", "LIT" };
            List<string> branchList = new List<string>();
            branchList.Add("TUP");
            branchList.Add("LIT")


            var mainPull = (from c in cDb.DistributionStopInformations
                            join rh in cDb.DistributionRouteHeaders on c.Route_Code equals rh.Route_Code
                            where c.Created_By == null && c.Company_No == 1 &&
                           (c.Customer_No == 228 || c.Customer_No == 227) &&
                           (c.Branch_Id IS IN branchesSearchList)

1 Ответ

0 голосов
/ 15 ноября 2018

list.Contains должен генерировать WHERE <column> IN (<comma separated values>)

var branches = new[] { "TUP", "LIT" };
var result = 
    cDb.DistributionStopInformations
       .Join(cDb.DistributionRouteHeaders, info => info.Route_Code, h => h.Route_Code)
       .Where(info => info.Created_By == null)
       .Where(info => info.Shipment_Type == "D")
       .Where(info => branches.Contains(info.Branch_Id)) // WHERE Branch_Id IN (...)
       .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...