繁体   English   中英

我如何使用(在LINQ中选择方法?

[英]How can i use in ( select method in linq?

我如何在linq中编写“ in(select) ”方法?

我正在尝试转换:

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();

要获得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();

你快到了。 删除.ToArray调用以防止直接执行查询,并使stockMaterials变量的类型为IQueryable<StockMaterial>

这是您要找的东西吗?

ActualAmountsByLocation = StockMaterials.Where(s => s.barcode == Barcode && s.ownership == 1).ToArray();
    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();

希望下面的代码示例对您有所帮助

// 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();
}

在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()之后更新;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM