C# 这个查询的lambda等价物是什么
假设在C# 这个查询的lambda等价物是什么,c#,lambda,C#,Lambda,假设在SQL中,我正在尝试运行此查询 Select * from MyTable where SomeCondition=true 我目前正在使用这个lambda表达式进行上述查询 using(var db=new DataClasses1DataContext()) { var result=db.MyTable.Where(myTable=>myTable.SomeCondition.Equals(true)).SingleOrDefault(); } 这是正确的方法还是我应该这样
SQL
中,我正在尝试运行此查询
Select * from MyTable where SomeCondition=true
我目前正在使用这个lambda表达式进行上述查询
using(var db=new DataClasses1DataContext())
{
var result=db.MyTable.Where(myTable=>myTable.SomeCondition.Equals(true)).SingleOrDefault();
}
这是正确的方法还是我应该这样做
using(var db=new DataClasses1DataContext())
{
var result=db.MyTable.Where(myTable=>myTable.SomeCondition.Equals(true)).Select(myTable=>myTable).SingleOrDefault();
}
有人能给我推荐一种正确的方法来执行Lambda
中的此类查询吗
欢迎您提供任何建议。如果您不想投影表格,甚至不需要选择:
using(var db=new DataClasses1DataContext())
{
var result=db.MyTable.Where(myTable => myTable.SomeCondition);
}
你是在问这部分是否必要吗
.Select(myTable=>myTable)
答案是否定的。它将项目列表转换为相同项目的列表。兰姆达:
x => x
是“identity函数”,精确返回传递的内容
NB
其他一些答案建议使用FirstOrDefault
作为SingleOrDefault
的替代方案。如果查询可能返回多条记录,并且您没有OrderBy
子句,那么数据库可能会以随机顺序返回结果。所以使用FirstOrDefault
就像说“随机挑选一个”
如果所有的记录都“足够好”(从某种意义上说),那就没问题了。如果没有,您应该添加一个OrderBy
子句,以便第一条记录是“最佳”记录。或者,您可能希望对符合条件的每个记录执行操作,在这种情况下,既不要使用FirstOrDefault
也不要使用SingleOrDefault`。只需循环查看结果
最后(根据下面的注释),如果您只想知道是否有匹配的记录,但不想检查其内容,请使用Any
进行筛选,执行标识转换,然后使用SingleOrDefault
,您可以通过以下方法完成这一切:
(如果更好的话,您可以在这里使用
FirstOrDefault
。无需在语句末尾添加以下代码
SingleOrDefault()
请使用以下代码
using(var db=new DataClasses1DataContext())
{
var result=db.MyTable.Where(myTable=>myTable.SomeCondition);
}
您可以这样使用:
使用(var db=new DataClasses1DataContext())
{
现在您将得到结果看起来很好,我可能会这样做:。其中(t=>t.SomeCondition==true)我可能会这样做:。其中(t=>t.SomeCondition)。SingleOrDefault();
==true
是不必要的。如果SomeCondition
是一个布尔值且为true,则无需将其与true进行比较即可得到结果。为什么要使用SingleOrDefault
来在有多行时引发异常?sql将返回所有行。SteenT因此我认为您的建议很好。谢谢。请注意,这并不适用为了解释SingleOrDefault
部分。非常感谢您的回答。我认为FirstOrDefault()在这种情况下应该更好,因为我认为可以有许多记录匹配该条件。我现在使用的是var result=db.MyTable.SingleOrDefault(MyTable=>MyTable.SomeCondition);感谢您的宝贵输入,基本上我只想检查是否有任何记录符合我的条件,因此FirstOrDefault()可能会有所帮助。我还在想为什么不使用.any()这符合我的目的。你对此的评论?如果你不想检查匹配记录的内容,那么Any
是好的,它只返回一个bool(你可以传递你想要任何记录满足的谓词)。在后台,数据库层通常会将其转换为SQL计数
。确切地说,我只想知道记录是否存在我不想检查记录的内容,所以我认为Any()在我的情况下是好的。你能更新答案吗?我会接受它。谢谢。无需检查。Equals(True)只留下了一些条件
using(var db=new DataClasses1DataContext())
{
var result=db.MyTable.Where(myTable=>myTable.SomeCondition);
}
var result=db.MyTable.Where(x=>x.SomeCondition.Equals(true));
}