术语LINQ代表语言集成查询。这是一个Microsoft .NET Framework模块, 将本机数据查询功能连接到.NET语言。它最初于2007年发布, 是.NET Framework 3.5的重要组成部分。它是完全集成的, 并且可以轻松地从内存中的对象, 数据库, XML文档等访问数据。
LINQ通过一组扩展在C#和Visual Basic中集成查询。
让我们看一些最常见的LINQ面试问题及其答案。这些问题将帮助你进行面试和其他考试。
1)什么是LINQ?
单词LINQ是语言集成查询的缩写。这是一个.NET框架模块, 将本机数据查询功能连接到.net语言。它可以轻松地从内存中的对象, 数据库, XML文档等访问数据。
2)在数据集中使用LINQ有什么优势?
LINQ的优点如下:
- 使用LINQ的主要目的是检索数据集中的复杂查询。
- LINQ用于合并来自两个不同数据集的值。
- 它还用于从数据集中获取唯一值。
- LINQ提供了一种比SQL查询更精确的方法来查询数据集。
- 与ADO.NET相比, LINQ还提供了更多功能。
3)编写LINQ查询语法有哪些不同的方法?
有两种常见的方法可将LINQ查询写入数据源。
- 查询语法或表达式语法
- 方法语法或方法扩展语法
4)查询语法是什么?
查询语法类似于数据库的结构化查询语言。在C#或VB代码中进行了描述。
语法
from <range variable> in <IEnumerable<T> or IQueryable<T> Collection>
<specific Query Operators> <lambda expression>
<select or groupBy operator> <result formation>
有关查询语法的几个要点如下。
- 它以FROM关键字开头, 以SELECT或GROUP BY关键字结尾。
- 它与SQL(结构化查询语言)语法相同。
- 它使用一些不同的运算符, 例如连接, 分组, 排序, 过滤运算符来构造所需的结果。
- 它使用隐式类型的变量来保存LINQ查询的结果。
5)解释LINQ方法的语法并举一个例子?
LINQ方法语法或流利语法使用Enumerable或Queryable静态类中包含的一些其他方法。
- 方法语法与调用扩展方法相同。
- LINQ方法语法也称为流利语法, 因为它有助于一系列扩展方法的调用。
- 隐式类型变量可用于保存LINQ查询的结果
语法
// string collection
IList<string> stringList = new List<string>() {
"Java Developer", ".Net Developer", "Graphics Designer", "Mean Stack Developer" , "Java"};
// LINQ Query Syntax
var result = stringList.Where(s => s.Contains("Tutorials"));
示例:方法语法的C#程序
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
// string collection
IList<string> stringList = new List<string>() {
"Java Developer", ".Net Developer", "Graphics Designer", "Mean Stack Developer" , "Java"
};
// LINQ Method Syntax
var result = stringList.Where(s => s.Contains("Developer"));
foreach (var str in result)
{
Console.WriteLine(str);
}
}
}
输出
Java Developer
.Net Developer
Mean Stack Developer
6)定义不同类型的LINQ?
LINQ的不同类型如下。
- LINQ对象
- LINQ转XML(XLINQ)
- LINQ转DataSet
- LINQ to SQL(DLINQ)
- LINQ到实体
除此之外, 还有一个名为PLINQ的LINQ类型, 它是Microsoft的并行LINQ。
7)描述LINQ的体系结构?
LINQ具有3层架构。最上层包含语言扩展, 最下层包含数据源。数据源通常是实现IEnumerable或IQueryable通用接口的对象。
除了基本的LINQ查询和数据源外, 还有另一个称为LINQ提供程序的组件。 LINQ提供程序的功能是将LINQ查询转换为一种格式, 以便可用数据源可以理解它。
8)解释LINQ to SQL?
LINQ to SQL是ADO.NET技术的一部分。它将关系数据作为对象进行管理。 LINQ to SQL将对象中的语言集成查询转换为SQL, 并将其转发到数据库以执行。当数据库响应时, 结果LINQ to SQL将它们转换回对象。
LINQ to SQL支持用户定义的函数和数据库中的存储过程。
9)向LINQ解释XML?
LINQ to XML提供DOM(文档对象模型)的内置文档转换功能, 并支持LINQ查询。使用它, 我们可以修改查询, 导航和保存XML文档的更改。它使我们能够编写查询来检索和导航元素和属性的集合。它与XPath和XQuery非常相似。
10)LINQ和存储过程之间有区别吗?
LINQ和存储过程之间的一些重要区别如下:
- 存储过程比LINQ查询快, 因为它们遵循正确的(预期)执行计划。
- 与存储过程相比, 在SQL查询中避免运行时错误很容易。
- LINQ使用.NET调试器来允许调试, 而存储过程则不能。
- 与存储过程相比, LINQ支持多个数据库。
- 基于LINQ的解决方案的部署比存储过程的部署更舒适。
11)什么是LinqDataSource控件?
如果要在ASP.NET网页中使用LINQ, 则LinqDataSource是数据集的重要组成部分。它用于设置标记文本中的属性, 控制, 检索和修改数据。它也可以用来声明性地将页面上的其他ASP.NET控件绑定到数据源。这样, 它类似于SQL Datasource和ObjectDataSource控件。
12)用示例解释LINQ Lambda表达式?
在LINQ中, Lambda表达式是一个没有名称的函数。通过使其简短而精确, 可以使语法更加全面。尽管它不像LINQ查询那样可读, 但它与LINQ查询同样重要。 Lambda表达式的范围是有限的。不能重复使用。
语法
(Input Parameter) => Method Expression
Lambda表达式决定编译时的类型。在表达式的左侧, 我们将输入参数放在方括号()下。参数名称可以是任何东西。参数名称符号的前面等于(=), 后跟一个更大的(>)符号, 用于从左向右传递参数。在右侧, 使用左侧参数通过输入密码传递来执行所需的操作。整个语法称为Lambda表达式。
示例:用于lambda表达式的C#程序
using System;
using System.Collections.Generic;
using System.Linq;
namespace LINQExamples
{
class Example
{
public static void Main(string[] args)
{
List<string> sports = new List<string>();
sports.Add("Cricket");
sports.Add("Hockey");
sports.Add("Football");
sports.Add("Rugby");
IEnumerable<string> result = sports.Select(x => x);
foreach (var item in result)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}}
输出
Cricket
Hockey
Football
Rugby
13)你如何计算列表或集合中的元素?
Count()函数用于计算列表中的项目数。
语法
在C#中
int[] Num = { 5, 4, 3, 2, 1};
int Count = Num.Count();
在VB.net中
Dim Num As Integer() = {5, 4, 3, 2, 1}
Dim Count As Integer = Num.Count()
如果考虑以上语法, 则使用LINQ Count()函数对”数字”列表中的项目总数进行计数。
14)在LINQ中定义API?
可以为实现IEnumerable或IQueryable接口的类编写LINQ查询。 System.Linq命名空间为LINQ查询所需的接口提供了许多类。
LINQ查询对实现IEnumerable或IQueryable接口的此类类使用一些扩展方法。
15)什么是LINQ中的表达式树?
Lambda表达式在表达式树构造中被广泛使用。表达式树以树状格式表示代码, 其中每个节点都充当印象。表达式树可以转换为已编译的代码并运行它。
在.NET框架中, Expression类用于通过API创建表达式树。 Expression Trees API还支持分配和某些控制流表达式, 例如条件块, 循环和try-catch块。通过使用API, 我们可以生成比从lambda表达式创建的表达式树更复杂的表达式树。
16)你对DataContext类了解什么?它与LINQ有什么关系?
DataContext类充当LINQ to SQL框架的传递点。它是通过数据库连接映射的所有访问的基础。
Datacontext轻巧且创建成本低。在将LINQ添加到SQL类之后, 准备好配置的空DataContext类由空的设计图表示。 DataContext类包含有关用于连接数据库的方法的信息。它还可以处理数据库中的数据。 DataContext类配置有第一项可用的连接数据。
17)在Visual Basic和C#中LINQ查询的基本语法是什么?
在Visual Basic中, From关键字用于启动LINQ查询的基本语法, 并以Select或Group By关键字结尾。你可以使用另一个关键字(例如Where, Order By, Order By Descending等)来执行其他功能, 例如过滤数据或按特定顺序生成数据。
在C#中, 基本语法以from关键字开头, 以Select或Group By关键字结尾。我们可以使用另一个子句, 例如Where, Order By, Order By Descending等。用于执行诸如过滤数据或按特定顺序生成数据的活动。
18)详细说明PLINQ吗?
术语PLINQ代表并行LINQ。它是LINQ对对象的并行实现。它支持并行编程, 并且与任务并行库紧密相关。它有助于某些查询来自动利用多个处理器。通过更有效地使用主机上所有可用的内核, PLINQ能够提高LINQ到对象查询的速度。
PLINQ的语法
以下是在c#vb.net中使用PLINQ提高LINQ查询性能的语法。
C#代码
IEnumerable<int> rvals = Enumerable.Range(1, 100000000);
var output1 = rvals.AsParallel().Where(x => x % 12345678 == 0).Select(x => x);
VB.NET代码
Dim rvals As IEnumerable(Of Integer) = Enumerable.Range(1, 100000000)
Dim output1 = rvals.AsParallel().Where(Function(x) x Mod 12345678 = 0).[Select](Function(x) x)
如果你注意到给定的语法, 则我对LINQ查询使用了Parallel方法来提高LINQ查询的性能。
19)LINQ中的LINQ标准查询运算符是什么?
标准查询运算符是形成LINQ模式的技术。这些技术应用于序列, 其中序列是实现IEnumerable <T>接口或IQueryable <T>接口的对象。标准查询运算符提供用于过滤, 投影, 排序, 聚合等的查询功能。
LINQ标准查询运算符有两组。一组对IEnumerable <T>类型的对象进行操作, 另一组对IQueryable <T>类型的对象进行操作。
考虑以下语法
var students= from s in studentList where s.age>18 select s;
在上面的示例中, where和select运算符是标准查询运算符。
这是一些标准查询运算符基于其功能的简要分类。
Classification | 标准查询运算符 |
---|---|
位置, 类型 | |
OrderBy, ThenBy, Reverse, OrderByDescending, ThenByDescending | |
GroupBy, ToLookup | |
GroupJoin, 加入 | |
选择, 选择很多 | |
汇总, 平均值, 计数, 长期计数, 最大值, 最小值, 总和 | |
全部, 任何, 包含 | |
相异, 除, 相交, 并集 | |
跳过, 跳过, 同时, 采取, 同时 | |
Concat | |
SequenceEqual | |
AsEnumerable, AsQueryable, Cast, ToArray, ToDictionary, ToList |
20)列出LINQ的主要组件吗?告诉我使用LINQ to SQL时文件的扩展名是什么?
LINQ的三个主要组成部分是
- 标准查询运算符
- 语言扩展
- LINQ供应商
使用LINQ to SQL时文件的扩展名是.dbml。
21)解释为什么SELECT子句在LINQ的FROM子句之后出现?
LINQ要求首先声明所有变量。 LINQ查询的” FROM”子句定义了选择记录的条件或范围, 因此FROM子句必须在LINQ查询中的SELECT之前起作用。
22)什么是匿名类型?
匿名类型是由编译器生成的运行时编译器。创建匿名编译器时无需指定名称, 但是我们可以编写属性名称及其值。编译器创建这些属性, 并在运行时为其分配值。
var v = new { PropertyFirst = "first value", PropertySecond = "second value" };
Console.WriteLine(k.PropertyFirst);
匿名类在LINQ查询中很有帮助。它在执行查询时保存中间结果。
对匿名类型也有一些限制:
- 匿名类型不能实现接口。
- 匿名类型不能指定任何方法。
- 我们无法定义静态成员。
- 所有定义的属性都必须初始化。
- 我们只能定义公共字段。
23)解释什么是LINQ编译查询?
在某些情况下, 我们会反复需要执行特定的查询。 LINQ允许我们创建查询并使其始终被编译。
编译查询的好处
- 这些查询不需要每次都编译, 因此查询的执行速度很快。
- 这些查询仅编译一次, 可以使用多次。
- 即使更改查询的参数, 也确实需要重新编译这些查询。
例子
static class MyCompliedQueries {
public static Func <DataClasses1DataContext, IQueryable <Person>> CompliedQueryForPerson =
CompiledQuery.Compile((DataClasses1DataContext context) = >from c in context.Persons select c);
}
24)LINQ中的First()和FirstOrDefault()选择器方法有什么区别?
First()方法始终期望结果集中至少有一个元素。如果结果中没有任何元素, 则First()返回一个异常。尽管FirstOrDefault()与具有0个元素的结果集兼容, 但它不会引发任何异常。
25)N层和N层体系结构有什么区别?
N层和N层是两个不同的概念。这些术语通常在应用程序体系结构的设计中使用。 N-Tier代表应用程序的实际n个系统组件。另一方面, N层代表组件的内部体系结构。
分层建筑风格的主要优点如下。
- 抽象化
- 隔离
- 可管理性
- 性能
- 可重用性
- 可测性
层体系结构样式的主要优点如下。
- 可维护性
- 可扩展性
- 灵活性
- 可用性
工作/人力资源面试问题 |
jQuery面试问题 |
Java OOP面试问题 |
JSP面试问题 |
休眠面试问题 |
SQL面试题 |
Android面试题 |
MySQL面试问题 |
筛选
排序
分组
加入
投影
聚合
量词
组
分区
级联
平等
转换次数
面试技巧
JavaScript面试问题
Java基础面试问题
Servlet面试问题
春季面试问题
PL / SQL面试问题
Oracle面试问题
SQL Server面试问题
来源:
https://www.srcmini02.com/33206.html