需要此查询才能在linq中进行转换 [英] Need this query to convert in linq

查看:99
本文介绍了需要此查询才能在linq中进行转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在linq中转换此查询:



how to convert in linq this query :

select t.Message
from [dbo].[tblA] t
inner join (
select Message, max(CreatedDate) as MaxDate
from [dbo].[tblA]
group by Message
) tm on t.Message = tm.Message and t.CreatedDate = tm.MaxDate
where Type='Enter'





我试过的:



i需要在linq中转换此sql查询



我尝试过: < br $> b $ b

i试过这个:





What I have tried:

i need to convert this sql query in linq

What I have tried:

i have tried this :

var sender = (from item in ct.tblA
              where item.Type == "Enter"
              group item by item.Message into msgGroup
              select msgGroup.OrderByDescending(t => t.CreatedDate).FirstOrDefault().Message).ToArray();





但是这个查询返回列表1时间类型=输入的所有用户的列表...我需要输入最后状态类型的用户列表。



请帮助我。



but this query return the list of all user who has at list 1 time type = enter ...i need the list of user who has the last status type enter.

Please help me .

推荐答案

您的查询与我在此提供的查询不同:如何在linq中转换此查询 [ ^ ]



如果我的早期的解决方案返回错误的结果集,试试这个:

Your query differs from query i provided here: How to convert in linq this query[^]

If my earlier solution returns wrong result set, try this:
var sender = (from item in ct.tblA
              group item by item.Message into msgGroup
              select msgGroup.Where(e=>e.Type == "Enter")
                    .OrderByDescending(e => e.CreatedDate)
                    .First()) 
      .ToList();





测试下面的例子(通过使用<啊ref =https://www.linqpad.net/class =externaltarget =_ blank> LinqPad ):



Tested on below example (via using LinqPad):

void Main()
{
	DataTable dt = new DataTable();
	dt.Columns.AddRange(new DataColumn[]
		{
			new DataColumn("Message", typeof(string)),
			new DataColumn("Type", typeof(string)),
			new DataColumn("CreatedDate", typeof(DateTime))
		});
	AddSampleData(ref dt);
	//dt.Dump();
	
	var latestMessages = dt.AsEnumerable()
		.GroupBy(x=>x.Field<string>("Message"))
		.Select(grp=>grp.Where(x=>x.Field<string>("Type")=="Enter")
			.OrderByDescending(x=>x.Field<DateTime>("CreatedDate"))
			.FirstOrDefault())
			.ToList();
		
	latestMessages.Dump();

}

// Define other methods and classes here
public void AddSampleData(ref DataTable dt)
{
	dt.Rows.Add(new object[]{"Hello World!", "Enter", DateTime.Now.AddHours(-5).AddMinutes(-45)});
	dt.Rows.Add(new object[]{"Hello World!", "Leave", DateTime.Now.AddHours(-5).AddMinutes(-47)});
	dt.Rows.Add(new object[]{"Hello World!", "Enter", DateTime.Now.AddHours(-5).AddMinutes(-49)});
	dt.Rows.Add(new object[]{"Hello Kitty!", "Enter", DateTime.Now.AddHours(-8).AddMinutes(-15)});
	dt.Rows.Add(new object[]{"Hello Kitty!", "Leave", DateTime.Now.AddHours(-7).AddMinutes(-55)});
	dt.Rows.Add(new object[]{"Hello Kitty!", "Exit", DateTime.Now.AddHours(-7).AddMinutes(-5)});
	dt.Rows.Add(new object[]{"Oh, Caramba!", "Enter", DateTime.Now.AddHours(-6).AddMinutes(-15)});
	dt.Rows.Add(new object[]{"Oh, Caramba!", "Leave", DateTime.Now.AddHours(-6).AddMinutes(-5)});
	dt.Rows.Add(new object[]{"Oh, Caramba!", "Exit", DateTime.Now.AddHours(-5).AddMinutes(-59)});
	dt.Rows.Add(new object[]{"Good evening!", "Enter", DateTime.Now.AddHours(-2)});
	dt.Rows.Add(new object[]{"Good evening!", "Leave", DateTime.Now.AddHours(-1).AddMinutes(-48)});
	dt.Rows.Add(new object[]{"Good evening!", "Enter", DateTime.Now.AddHours(-1).AddMinutes(-45)});
}


这篇关于需要此查询才能在linq中进行转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆