LinQ多表查询返回单张表的List<>结果集,但是页面要求用DataTable类型的接收这个结果集 如何将这个list转成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinQ多表查询返回单张表的List<>结果集,但是页面要求用DataTable类型的接收这个结果集 如何将这个list转成相关的知识,希望对你有一定的参考价值。

MaintainRegionBll bll = new MaintainRegionBll();
List<T_D_MaintainRegion> list=
bll.FindMaintainRegionByUserId(Session["UserID"].ToString());
DataTalbe dt=list.ToDataTable() 其他页面都可以用这种转换方式。不知道什么原因这种转换方式在此用不了

ToDataTable()那是其他人写的方法。 你可以自己写一个。如下:
public staic class ListExtension

public static DataTable ToDataTable(this List<T_D_MaintainRegion> list)

DataTable dt= new DataTable();
dt.Columns.Add( xxxxxxx);
..............
foreach(T_D_MaintainRegion item in list)

dt.Rows.Add(item.xxx,item.xxx......);

return dt;

参考技术A 遍历一下呢

通过Linq查询从双值的元组返回一个List

我有一个具有双值的元组列表:

List<Tuple<string, string>> Descriptions;

我一直在为此添加内容,如下所示:

Descriptions.Add (new Tuple<string, string> ("max", "some description"));
Descriptions.Add (new Tuple<string, string> ("joe", "some description"));
Descriptions.Add (new Tuple<string, string> ("jane", "some description"));
Descriptions.Add (new Tuple<string, string> ("max", "some other description"));

我想使用Linq检索一个列表,其中元组中的Item1是一个特定值,比如"max"。我可以使用这段代码:

var s = Descriptions.Where (x => x.Item1 == "max");

但是这将分配一个我不想要的元组列表。我只想要一个描述字符串的列表,也就是说,它应该返回一个list<string>,其中包含与Item1字符串"max"相关的所有描述。

答案

使用Select

var s = Descriptions.Where (x => x.Item1 == "max").Select(y => y.Item2);

这将返回一个IEnumerable<string>。如果你想要一个列表,你还需要在最后添加ToList

var s = Descriptions.Where (x => x.Item1 == "max").Select(y => y.Item2).ToList();

或者您可以使用查询语法:

var s = from d in Descriptions
        where d.Item1 == "max"
        select d.Item2;

这与第一个选项相同。实际上,编译器会将查询语法转换为linq的扩展方法。

另一答案

Where()之后,你可以使用Select()方法只获得description,在你的情况下将是Item2Tuple,你需要这样做:

var s = Descriptions.Where(x => x.Item1 == "max")
                    .Select(x=>x.Item2); // projects only Description

这将返回IEnumerable<string>形式的所有元素,其中Item1具有值"max",如果你真的想把它作为List<string>,那么你可以在结尾添加ToList()方法调用。

希望能帮助到你。

另一答案

如果您不使用其他解决方案,请尝试使用字典而不是元组列表。根据您的内容的外观,这更符合您的需求(只有您的名字是唯一的)。

Dictionary<string, string> NameDesc = new Dictionary<string, string>();
            NameDesc.Add("max", "desc1");
            NameDesc.Add("tim", "desc2");

            var description = NameDesc["max"];
            var maxExists = NameDesc.ContainsKey("max");

以上是关于LinQ多表查询返回单张表的List<>结果集,但是页面要求用DataTable类型的接收这个结果集 如何将这个list转成的主要内容,如果未能解决你的问题,请参考以下文章

用于连接多对多表的 Linq 查询

c# ef框架怎么使用linq语句多表查询?

Linq多表查询 返回组合实体 踩坑记

C#多表查询返回List<T>

linq多表查询,并返回所以字段,注意:不要一个一个列出字段,不要select newa,b返回结果,求高手解答

SpringBoot12 QueryDSL02之利用QueryDSL实现多表关联查询