C# LINQ lambda表达式中的Where条件
我不熟悉使用lambda表达式的LINQ查询表达式。我有一种方法,我想用它更新另一个表中的值。 它在单一或默认情况下运行良好,但在使用Where条件时则不行C# LINQ lambda表达式中的Where条件,c#,.net,entity-framework,linq,linq-to-entities,C#,.net,Entity Framework,Linq,Linq To Entities,我不熟悉使用lambda表达式的LINQ查询表达式。我有一种方法,我想用它更新另一个表中的值。 它在单一或默认情况下运行良好,但在使用Where条件时则不行 public static void UpdateData(int UserID) { using (var objEntity = new DataContext()) { UserMaster objUser = objEntity.UserMasters.SingleOrDefault(TBL =&g
public static void UpdateData(int UserID)
{
using (var objEntity = new DataContext())
{
UserMaster objUser = objEntity.UserMasters.SingleOrDefault(TBL => TBL.UserID == UserID);
UserOfferUsed objUserUsed = objEntity.UserOfferUseds.Where(TBL => TBL.UserID == UserID);
objUser.Purchaseon = DateTime.Now.ToString("dd MMMM yyyy");
objUserUsed.UsedCoupon = 0;
objEntity.SaveChanges();
objData = null;
}
}
错误:无法隐式转换类型
“System.Linq.IQueryable”到
“Database.UserOfferUsed”。存在一个显式转换(您是吗
缺少演员阵容?)
.Where
将在此处返回一个IQueryable
,使用.SingleOrDefault
或.FirstOrDefault
获取结果(如果所需结果仅为单个项目)。或者,如果结果将包含多个元素,则可以使用.ToList()
。如果是这样,您必须将objUserUsed
更改为List
,也就是说,您的代码如下所示:
UserOfferUsed objUserUsed = objEntity.UserOfferUseds.FirstOrDefault(TBL => TBL.UserID == UserID);
还是像这样
List<UserOfferUsed> objUserUsed = objEntity.UserOfferUseds.Where(TBL => TBL.UserID == UserID).ToList();
.Where
将在此处返回一个IQueryable
,使用.SingleOrDefault
或.FirstOrDefault
获取结果(如果所需结果仅为单个项目)。或者,如果结果将包含多个元素,则可以使用.ToList()
。如果是这样,您必须将objUserUsed
更改为List
,也就是说,您的代码如下所示:
UserOfferUsed objUserUsed = objEntity.UserOfferUseds.FirstOrDefault(TBL => TBL.UserID == UserID);
还是像这样
List<UserOfferUsed> objUserUsed = objEntity.UserOfferUseds.Where(TBL => TBL.UserID == UserID).ToList();
linq语句作用于可枚举的序列。这意味着你可以说:给我第一个。还有:我有这个,给我下一个 大多数linq运算符返回IEnumerable
IEnumerable<UserOfferUsed> mySequence = objEntity.UserOfferUseds
.Where(TBL => TBL.UserID == UserID);
UserOfferUsed objUserUsed = mySequence.SingleOrDefault();
如果您查找像First/Single/Any/All这样的函数,Linq函数不返回序列,而是返回序列的一个元素,那么您将找到一个带有参数的版本和一个无参数的版本。带参数的函数与使用Where带参数后接无参数函数的效果相同:
var result = SomeSequence.Last( x => SomeFunction(x))
返回与以下内容相同的序列项:
var result = SomeSequence.Where( x => SomeFunction(x)).Last();
linq语句作用于可枚举的序列。这意味着你可以说:给我第一个。还有:我有这个,给我下一个 大多数linq运算符返回IEnumerable
IEnumerable<UserOfferUsed> mySequence = objEntity.UserOfferUseds
.Where(TBL => TBL.UserID == UserID);
UserOfferUsed objUserUsed = mySequence.SingleOrDefault();
如果您查找像First/Single/Any/All这样的函数,Linq函数不返回序列,而是返回序列的一个元素,那么您将找到一个带有参数的版本和一个无参数的版本。带参数的函数与使用Where带参数后接无参数函数的效果相同:
var result = SomeSequence.Last( x => SomeFunction(x))
返回与以下内容相同的序列项:
var result = SomeSequence.Where( x => SomeFunction(x)).Last();
谢谢你的快速回复。但在得到列表后,如何更新objUserUsed表的列值?因为我需要更新表中的多个新值。。不仅仅是单个或第一个..而不是这个
objUserUsed=objEntity.userofferseds.Where(TBL=>TBL.UserID==UserID).FirstOrDefault()
;我们可以试试这个objUserUsed=objEntity.userofferseds.FirstOrDefault(TBL=>TBL.UserID==UserID)代码>感谢您的快速回复。但在得到列表后,如何更新objUserUsed表的列值?因为我需要更新表中的多个新值。。不仅仅是单个或第一个..而不是这个objUserUsed=objEntity.userofferseds.Where(TBL=>TBL.UserID==UserID).FirstOrDefault()
;我们可以试试这个objUserUsed=objEntity.userofferseds.FirstOrDefault(TBL=>TBL.UserID==UserID)代码>