LINQ to SQL в а не в - PullRequest
       31

LINQ to SQL в а не в

9 голосов
/ 15 июня 2010

Что такое in и not in равно LINQ to SQL ?

Например

select * from table in ( ...)
and 
select * from table not in (..)

Что равно приведенному выше утверждению в LINQ to SQL?

Ответы [ 3 ]

21 голосов
/ 15 июня 2010

Вы используете, where <list>.Contains( <item> )

var myProducts = from p in db.Products
                 where productList.Contains(p.ProductID)
                 select p;

Или у вас может быть заранее заданный список:

int[] ids = {1, 2, 3};

var query = from item in context.items
            where ids.Contains( item.id )
            select item;

Для случая «НЕ» просто добавьте «!»оператор перед оператором «Содержит».

8 голосов
/ 15 июня 2010

Я смущен вашим вопросом. in и not in работают с полями в запросе, но вы не указываете поле в своем примере запроса. Так должно быть что-то вроде:

select * from table where fieldname in ('val1', 'val2')

или

select * from table where fieldname not in (1, 2)

Эквивалент этих запросов в LINQ to SQL будет выглядеть примерно так:

List<string> validValues = new List<string>() { "val1", "val2"};
var qry = from item in dataContext.TableName
          where validValues.Contains(item.FieldName)
          select item;

и это:

List<int> validValues = new List<int>() { 1, 2};
var qry = from item in dataContext.TableName
          where !validValues.Contains(item.FieldName)
          select item;
0 голосов
/ 19 июня 2013

Пожалуйста, попробуйте это для SQL не IN

var v = from cs in context.Sal_Customer
         join sag in context.Sal_SalesAgreement
         on cs.CustomerCode equals sag.CustomerCode
         where
          !(
               from cus in context.Sal_Customer
               join
               cfc in context.Sal_CollectionFromCustomers
               on cus.CustomerCode equals cfc.CustomerCode
               where cus.UnitCode == locationCode &&
                     cus.Status == Helper.Active &&
                     cfc.CollectionType == Helper.CollectionTypeDRF
               select cus.CustomerCode
           ).Contains(cs.CustomerCode) &&
           cs.UnitCode == locationCode &&
           cs.Status == customerStatus &&
           SqlFunctions.DateDiff("Month", sag.AgreementDate, drfaDate) < 36
           select new CustomerDisasterRecoveryDetails
           {
             CustomerCode = cs.CustomerCode,
             CustomerName = cs.CustomerName,
             AgreementDate = sag.AgreementDate,
             AgreementDuration = SqlFunctions.DateDiff("Month", sag.AgreementDate, drfaDate)
   };

Пожалуйста, попробуйте это для SQL IN

context.Sal_PackageOrItemCapacity.Where(c => c.ProjectCode == projectCode && c.Status == Helper.Active && c.CapacityFor.Contains(isForItemOrPackage)).ToList();
...