gpt4 book ai didi

c# linq to sql - 在 linq 中断查询结束时围绕 FirstOrDefault() 移动

转载 作者:行者123 更新时间:2023-11-30 21:14:50 26 4
gpt4 key购买 nike

下面两段代码有什么区别?

这将返回我期望的数据....

return productTable.FirstOrDefault(p => p.ProductId == productId);

这不是....

return productTable.Where(x => x.ProductId == productId).FirstOrDefault();

我主要只是想知道这两者之间是否存在逻辑上的差异。

最佳答案

这些查询在本质上应该是相同的。 FirstOrDefault() 的无参数版本仅获取查询中可用的第一条记录,如果没有可用记录,则获取默认值(即 null)。

编辑 2 正如评论中适当指出的那样,我应该使用 LINQ-to-SQL。下面是一个使用 LINQ-to-SQL 的示例:

using (ProductsDataContext context = new ProductsDataContext())
{
context.Log = Console.Out;
var p1 = context.Products.FirstOrDefault(p => p.ProductId == 1);
var p2 = context.Products.Where(p => p.ProductId == 1).FirstOrDefault();
}

输出(注意查询完全相同):

SELECT TOP (1) [t0].[ProductId], [t0].[Name] FROM [dbo].[Products] AS [t0] WHERE [t0].[ProductId] = @p0 -- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

SELECT TOP (1) [t0].[ProductId], [t0].[Name] FROM [dbo].[Products] AS [t0] WHERE [t0].[ProductId] = @p0 -- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1] -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

编辑:这是演示它们是同一事物的示例代码:

class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
}

class Program
{
static void Main(string[] args)
{
List<Product> productTable = new List<Product> {
new Product { ProductId = 123, Name = "Cheese" },
new Product { ProductId = 456, Name = "Milk" },
};

var r1 = productTable.FirstOrDefault(p => p.ProductId == 123);
var r2 = productTable.Where(p => p.ProductId == 123).FirstOrDefault();

// these print out the same thing
Console.WriteLine(r1.Name);
Console.WriteLine(r2.Name);

Console.ReadLine();
}
}

关于c# linq to sql - 在 linq 中断查询结束时围绕 FirstOrDefault() 移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com