Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这个查询的lambda等价物是什么_C#_Lambda - Fatal编程技术网

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

}