关于linq 查询两张表,返回合并后的两张表语句咋写

关于linq 查询两张表,返回合并后的两张表语句咋写,第1张

来,试试下面代码(列名称不固定,通用方法):

using System;

using SystemCollectionsGeneric;

using SystemData;

using SystemLinq;

using SystemText;

namespace test

{

    class Program

    {

        static void Main(string[] args)

        {

            DataTable dt = new DataTable();

            DataTable dt1 = new DataTable("table1");

            dt1ColumnsAddRange(new DataColumn[] { new DataColumn("id"), new DataColumn("name"), new DataColumn("age") });

            dt1RowsAdd(new object[] { "1", "a", 12 });

            dt1RowsAdd(new object[] { "2", "b", 12 });

            DataTable dt2 = new DataTable("table2");

            dt2ColumnsAddRange(new DataColumn[] { new DataColumn("ID"), new DataColumn("name2"), new DataColumn("age2"), new DataColumn("address") });

            dt2RowsAdd(new object[] { "1", "b", 12 });

            dt2RowsAdd(new object[] { "3", "b", 12 });

            var query =

               from rHead in dt1AsEnumerable()

               join rTail in dt2AsEnumerable()

               on rHeadField<string>("id") equals rTailField<string>("ID")

               select rHeadItemArrayConcat(rTailItemArraySkip(0));

            foreach (DataColumn item in dt1Columns)//列不固定

            {

                dtColumnsAdd(itemColumnName);

            }

            foreach (DataColumn item in dt2Columns)//列不固定

            {

                dtColumnsAdd(itemColumnName);

            }

            foreach (var obj in query)

            {

                DataRow dr = dtNewRow();

                drItemArray = objToArray();

                dtRowsAdd(dr);

            }

        }

    }

}

typeof(T)Name

得到单数您确定么

首先您说的typeof(T)Name这个函数为

获取T的DATATYPE基类型NAME为该基类型的CLASS定义名称

entity:实体对吧我实在没明白您是想在这个框架内做什么事情

如果您说是BUS变成BUSES那我告诉您一个秘密C#在中文系统下允许汉字命名类,也就是我定义一个"人",能变成啥

下面我说两个猜想,第一段为疑问,第二段为我根据您的描述自己觉得您的问题解答方式:

1

我再看看您的问题跟楼上几位的回答以下为我个人疑问点您补充一下,,然后我回答吧:

假如说现在有个Employee的entity,那Employee是复数形式

Employee在您的思维范围内是基本的员工实体吧我可以当作是复数也可以当作不是

甚至单词写错亦不是我的问题或编译器能够处理的吧所以您方便举例说明什么是单数情况,什么是复数情况嘛

然后就是:也就是说不能一律加s

这句话,您的意思是想干啥呢就获取一个字符串那很简单

下面就看我的猜想吧

2根据您末尾描述:

我现在有个函数,有泛型类型参数T,typeof(T)Name可以得到单数,如何得到复数?

我差不多明白您想干啥了

尝试自己编写一个类:

我下面是手敲了,,对不对自己改正一下

public class MyTypeofHelper

{

public static string MyTypeof-GetName(T t)

{

return typeof(t)Name

}

public static string MyTypeof-GetName(T t)

{

//这里根据类特性,获取您自定义的一个内容

例如我这边随便写了啊

tGetField("Names")GetValue(t);

这样应该就行了= =好吧我也说不清楚了

然后在定义这些实体时候呢,加上一个属性即可

}

}

例如这样

public class bus

{

//你自己随便定义撒

固定定义一个

public string Names

{get{return "Buess";}}

}

然后是什么就是什么即可

属于一对多表,一个用户有多个权限

怎么查到用户未拥有的权限,如下:

@userid转入用户ID ,思路:以权限表group表为主表,查询用户已有的权限不在主表之类的就是-》未拥有的权限

sql语句子查询 *** 作!

select from group where groupid not in(select groupid from 权限外表 where userid=@userid)

Linq语法跟sqlserver 类似。自连接的查询

var q =

from c in dbgroup

from o in db权限外表 where userid==@userid && cgroupid!=ogroupid select c;

Linq与T-SQL 语法

T-SQL: select |字段 as 别名 from 表{集合} where 条件 order by 排序

Linq: from 变量[foreach] in 集合 where 条件[逻辑] orderby 排序 select {变量}| new {别名=字段列表}

你是想用两个表的数据筛选啊,还是想把两个表的数据合并啊

这个是两个表的数据筛选:

var data =from A in dbtable1

let t= from B in dbtable2

where BID==1

selectBID

where tContains(AIDvalue)

select A

合并两个表并消除重复行:

var data= (from A in dbtable1

where Aid=1

select A)Union(

from B in dbtable2

select B);

直接gridviewdatasource=data;

LinQ软件无需任何连接电缆就能将笔记本电脑桌面显示到 SMART交互式屏幕上。 LinQ软件使用以下两个组件:安装在笔记本电 LinQ软件和SMART Board 9x软件,后者的“移动设备管理器”已在交互式设备上打开。所涉及的笔记本电脑和连接至交互式屏幕的计算机必须处于同一个局域网中。虽然最多能将5台计算机同时连接到一个交互式设备上,但每次只能观看到一台计算机输出的视频。用户可以使用交互式设备自带的工具在笔记本电脑上的文件中进行书写,可以在LinQ用户指南中找到如何配合SMART Board软件使用LinQ软件的全部说明。

在交互式屏幕上启动移动设备管理器的方法如下:打开SMART Board控制面板,单击移动和无线设备设置,然后选则启动移动设备管理器,最后单击确认按钮。连接笔记本电脑的方法如下:启 LinQ软件并键入您的姓名,然后从列表中选择所要连接的设备,最后单击连接按钮。共享笔记本电脑桌面方法如下:单 LinQ软件窗口中的共享桌面按钮。

使用join来连接

EnumerableJoin<TOuter, TInner, TKey, TResult> 方法 (IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>)

发送反馈

基于匹配键对两个序列元素进行关联。

使用默认的相等比较器对键进行比较。

命名空间: SystemLinq

程序集: SystemCore(在 SystemCoredll 中)

语法

--------------------------------------------------------------------------------

VBC#C++F#JScript以带有颜色区分的格式查看复制到剪贴板打印<ExtensionAttribute> _

Public Shared Function Join(Of TOuter, TInner, TKey, TResult) ( _

outer As IEnumerable(Of TOuter), _

inner As IEnumerable(Of TInner), _

outerKeySelector As Func(Of TOuter, TKey), _

innerKeySelector As Func(Of TInner, TKey), _

resultSelector As Func(Of TOuter, TInner, TResult) _

) As IEnumerable(Of TResult)

<ExtensionAttribute> _

Public Shared Function Join(Of TOuter, TInner, TKey, TResult) ( _

outer As IEnumerable(Of TOuter), _

inner As IEnumerable(Of TInner), _

outerKeySelector As Func(Of TOuter, TKey), _

innerKeySelector As Func(Of TInner, TKey), _

resultSelector As Func(Of TOuter, TInner, TResult) _

) As IEnumerable(Of TResult)

public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(

this IEnumerable<TOuter> outer,

IEnumerable<TInner> inner,

Func<TOuter, TKey> outerKeySelector,

Func<TInner, TKey> innerKeySelector,

Func<TOuter, TInner, TResult> resultSelector

)

public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(

this IEnumerable<TOuter> outer,

IEnumerable<TInner> inner,

Func<TOuter, TKey> outerKeySelector,

Func<TInner, TKey> innerKeySelector,

Func<TOuter, TInner, TResult> resultSelector

)

[ExtensionAttribute]

public:

generic<typename TOuter, typename TInner, typename TKey, typename TResult>

static IEnumerable<TResult>^ Join(

IEnumerable<TOuter>^ outer,

IEnumerable<TInner>^ inner,

Func<TOuter, TKey>^ outerKeySelector,

Func<TInner, TKey>^ innerKeySelector,

Func<TOuter, TInner, TResult>^ resultSelector

)

[ExtensionAttribute]

public:

generic<typename TOuter, typename TInner, typename TKey, typename TResult>

static IEnumerable<TResult>^ Join(

IEnumerable<TOuter>^ outer,

IEnumerable<TInner>^ inner,

Func<TOuter, TKey>^ outerKeySelector,

Func<TInner, TKey>^ innerKeySelector,

Func<TOuter, TInner, TResult>^ resultSelector

)

static member Join :

outer:IEnumerable<'TOuter>

inner:IEnumerable<'TInner>

outerKeySelector:Func<'TOuter, 'TKey>

innerKeySelector:Func<'TInner, 'TKey>

resultSelector:Func<'TOuter, 'TInner, 'TResult> -> IEnumerable<'TResult>

static member Join :

outer:IEnumerable<'TOuter>

inner:IEnumerable<'TInner>

outerKeySelector:Func<'TOuter, 'TKey>

innerKeySelector:Func<'TInner, 'TKey>

resultSelector:Func<'TOuter, 'TInner, 'TResult> -> IEnumerable<'TResult>

类型参数

TOuter

第一个序列中的元素的类型。

TInner

第二个序列中的元素的类型。

TKey

键选择器函数返回的键的类型。

TResult

结果元素的类型。

参数

outer

类型: SystemCollectionsGenericIEnumerable <TOuter>

要联接的第一个序列。

inner

类型: SystemCollectionsGenericIEnumerable <TInner>

要与第一个序列联接的序列。

outerKeySelector

类型: SystemFunc <TOuter, TKey>

用于从第一个序列的每个元素提取联接键的函数。

innerKeySelector

类型: SystemFunc <TInner, TKey>

用于从第二个序列的每个元素提取联接键的函数。

resultSelector

类型: SystemFunc <TOuter, TInner, TResult>

用于从两个匹配元素创建结果元素的函数。

返回值

类型: SystemCollectionsGenericIEnumerable <TResult>

一个具有 TResult 类型元素的 IEnumerable<T>,这些元素是通过对两个序列执行内部联接得来的。

使用说明

在 Visual Basic 和 C# 中,可以在 IEnumerable<TOuter> 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时,请省略第一个参数。有关更多信息,请参见 扩展方法 (Visual Basic)或 扩展方法(C# 编程指南)。

异常

--------------------------------------------------------------------------------

异常 条件

ArgumentNullException

outer 或 inner 或 outerKeySelector 或 innerKeySelector 或 resultSelector 为 null。

备注

--------------------------------------------------------------------------------

此方法通过使用延迟执行实现。

即时返回值为一个对象,该对象存储执行 *** 作所需的所有信息。

只有通过直接调用对象的 GetEnumerator 方法或使用 Visual C# 中的 foreach(或 Visual Basic 中的 For Each)来枚举该对象时,才执行此方法表示的查询。

使用默认的相等比较器 Default 对键进行哈希处理和比较。

联接是指基于某个公共键使两个信息源的元素相关联的 *** 作。

Join 在一个方法调用中产生两个信息源和使它们相匹配的密钥。

这与 SelectMany 的用法不同,后者需要一个以上的方法调用才可以执行相同的 *** 作。

Join 保留 outer 中的元素的顺序,并且对于这些元素中的每一个元素,保留 inner 中的匹配元素的顺序。

在查询表达式语法中, join (Visual C#) 或 Join (Visual Basic) 子句转换为 Join 的一个调用。

在关系数据库术语中, Join 方法实现内部同等联接。'

“内部”表示结果中仅包含在另一序列中具有匹配项的元素。

“同等联接”是在其中比较键是否相等的联接。

左外部联接 *** 作没有专用的标准查询运算符,但可以使用 GroupJoin 方法执行此 *** 作。

请参见 联接运算。

示例

--------------------------------------------------------------------------------

下面的代码示例演示如何使用 Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>) 基于公共键对两个序列执行内部联接。

VBC#C++F#JScript以带有颜色区分的格式查看复制到剪贴板打印Structure Person

Public Name As String

End Structure

Structure Pet

Public Name As String

Public Owner As Person

End Structure

Sub JoinEx1()

Dim magnus As New Person With {Name = "Hedlund, Magnus"}

Dim terry As New Person With {Name = "Adams, Terry"}

Dim charlotte As New Person With {Name = "Weiss, Charlotte"}

Dim barley As New Pet With {Name = "Barley", Owner = terry}

Dim boots As New Pet With {Name = "Boots", Owner = terry}

Dim whiskers As New Pet With {Name = "Whiskers", Owner = charlotte}

Dim daisy As New Pet With {Name = "Daisy", Owner = magnus}

Dim people As New List(Of Person)(New Person() {magnus, terry, charlotte})

Dim pets As New List(Of Pet)(New Pet() {barley, boots, whiskers, daisy})

' Create a list of Person-Pet pairs, where each element is an

' anonymous type that contains a Pet's name and the name of the

' Person that owns the Pet

Dim query = _

peopleJoin(pets, _

Function(person) person, _

Function(pet) petOwner, _

Function(person, pet) _

New With {OwnerName = personName, Pet = petName})

Dim output As New SystemTextStringBuilder

For Each obj In query

outputAppendLine(objOwnerName & " - " & objPet)

Next

' Display the output

MsgBox(outputToString)

End Sub

' This code produces the following output:

'

' Hedlund, Magnus - Daisy

' Adams, Terry - Barley

' Adams, Terry - Boots

' Weiss, Charlotte - Whiskers

Structure Person

Public Name As String

End Structure

Structure Pet

Public Name As String

Public Owner As Person

End Structure

Sub JoinEx1()

Dim magnus As New Person With {Name = "Hedlund, Magnus"}

Dim terry As New Person With {Name = "Adams, Terry"}

Dim charlotte As New Person With {Name = "Weiss, Charlotte"}

Dim barley As New Pet With {Name = "Barley", Owner = terry}

Dim boots As New Pet With {Name = "Boots", Owner = terry}

Dim whiskers As New Pet With {Name = "Whiskers", Owner = charlotte}

Dim daisy As New Pet With {Name = "Daisy", Owner = magnus}

Dim people As New List(Of Person)(New Person() {magnus, terry, charlotte})

Dim pets As New List(Of Pet)(New Pet() {barley, boots, whiskers, daisy})

' Create a list of Person-Pet pairs, where each element is an

' anonymous type that contains a Pet's name and the name of the

' Person that owns the Pet

Dim query = _

peopleJoin(pets, _

Function(person) person, _

Function(pet) petOwner, _

Function(person, pet) _

New With {OwnerName = personName, Pet = petName})

Dim output As New SystemTextStringBuilder

For Each obj In query

outputAppendLine(objOwnerName & " - " & objPet)

Next

' Display the output

MsgBox(outputToString)

End Sub

' This code produces the following output:

'

' Hedlund, Magnus - Daisy

' Adams, Terry - Barley

' Adams, Terry - Boots

' Weiss, Charlotte - Whiskers

以上就是关于关于linq 查询两张表,返回合并后的两张表语句咋写全部的内容,包括:关于linq 查询两张表,返回合并后的两张表语句咋写、请教C#/.net/linq/EF如何根据表名获取复数形式。、.NET 关于linq和lambda表达式的查询问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10128794.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存