Как я могу использовать в (выберите метод в Linq? - PullRequest
0 голосов
/ 28 июня 2010

как я могу написать " в (выбрать " метод в linq?

Я пытаюсь преобразовать:

UPDATE ActualAmountsByLocation SET isCustomerItem=1 WHERE ItemBarcode IN (SELECT barcode FROM StockMaterials WHERE barcode=@Barcode AND ownership=1)

Я пробовал вот так:

    Array stockMaterials = ( from s in stockMovementCtx.StockMaterials where s.barcode == Barcode && s.ownership ==1 select s).ToArray();
                           actualAmountsByLocation = (from a in stockMovementCtx.ActualAmountsByLocations
                                                       where a.ItemBarcode.Contains(stockMaterials)
                                                      select a).First();

Ответы [ 6 ]

2 голосов
/ 28 июня 2010

Чтобы получить запрос IN, вам нужно изменить смысл содержимого. Кроме того, нет необходимости в материализации первого запроса, IMO.

var stockMaterials = from s in stockMovementCtx.StockMaterials
                     where s.barcode == Barcode && s.ownership ==1
                     select s;
actualAmountsByLocation = (from a in stockMovementCtx.ActualAmountsByLocations
                           where stockMaterials.Contains( a.ItemBarcode)
                           select a).First();
1 голос
/ 28 июня 2010

Ты почти у цели. Удалите вызов .ToArray, чтобы предотвратить выполнение запроса напрямую, и задайте переменную stockMaterials типа IQueryable<StockMaterial>.

.
0 голосов
/ 29 июня 2010

Создание обновлений в LinQ - это очень просто, проверьте, например, приведенный ниже кодовый блок.

var user = (from s in dataContext.USERS

Вызов таблицы пользователей и установка условия условия.

where s.UserId.Equals(id) select s).FirstOrDefault();

Я хочу внести изменения в электронную почту пользователя. (Не забывайте это: если вы звоните с помощью ToList (), вам нужно контролировать количество списков, чтобы избежать исключения для ex: if(user.Count> 0) ..)

Обновление пользователя:

s.EmailAddress = serkan@serkanhekimoglu.com;
dataContext.SubmitChanges();

и ваши данные будут обновлены после SubmitChanges ();

0 голосов
/ 28 июня 2010

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

// these are using linq methods
var barcodes = stockMovementCtx.StockMaterials
                 .Where(s => s.barcode == Barcode && s.ownership == 1)
                 .Select(s => s.barcode);
var amounts = stockMovementCtx.ActualAmountsByLocations
                .Where(a => barcodes.Contains(a.ItemBarCode))
                .FirstOrDefault();
// if you would like to use the query expressions instead, here they are
//var barcodes = from s in stockMovementCtx.StockMaterials
//               where s.barcode = Barcode && s.ownership == 1
//               select s.barcode;
//var amounts = (from a in stockMovementCtx.ActualAmountsByLocations
//              where barcodes.Contains(a.ItemBarCode.Contains)
//              select a).FirstOrDefault();

// helpful to use FirstOrDefault if you are not sure that the query will return a result
if (amounts != null) {
  // change value
  amounts.IsCustomerItem = 1;
  // update database
  stockMovementCtx.SubmitChanges();
}
0 голосов
/ 28 июня 2010
    var stockMaterials = (from s in stockMovementCtx.StockMaterials
                          where s.barcode == Barcode && s.ownership == 1
                          select s).ToArray();
    var actualAmountsByLocation = (from a in stockMovementCtx.ActualAmountsByLocations
                                   where stockMaterials.Contains(a.ItemBarcode)
                                   select a).First();
0 голосов
/ 28 июня 2010

Это то, что вы ищете?

ActualAmountsByLocation = StockMaterials.Where(s => s.barcode == Barcode && s.ownership == 1).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...