gpt4 book ai didi

linq-to-sql - 如何在不知道其类型的情况下在C#3.0中返回IQueryable?

转载 作者:行者123 更新时间:2023-12-01 04:50:02 25 4
gpt4 key购买 nike

我有一个执行查询SQL的方法(我正在使用Linq to SQL,但我必须执行经典的SQL查询),但是我不知道将从哪个表/实体生成该查询。

因此,我在想,因为我不知道从哪个表生成查询,所以我不知道IQueryable的类型,对吗?

但是我不知道如何返回此IQueryable?我试图返回<T>,但是它不起作用。

谢谢!

最佳答案

您可以在方法内部构建IQueryable<T>,然后使该方法通用。如果这样做,那么您将能够直接返回IQueryable<T>,并且C#编译器可以使用类型推断来确定编译时的T。这是大多数Linq运算符的有效构建方式,除非它们被实现为Extension方法。

例如,考虑删除列表中任何该类型默认值的方法:

public static IQueryable<T> FilterDefaults<T>(IQueryable<T> theSet)
{
IQueryable<T> query =
from t in theSet
where t != default(T)
select t;

return query;
}


现在,当您在C#中调用此代码时,您可以省去 <T>,因为类型推断可以在编译时确定 T仍然是强类型的:

string[] myStrs = { "ABC", null, "", "123", null, "XYZ" };
var theFilteredStrs = FilterDefaults(myStrs);
// should represent the sequence: "ABC", "", "123", "XYZ"
// note null is missing because default(string) is null

int[] myNums = { -1, 0, 3, 0, 42 };
var theFilteredNums = FilterDefaults(myNums);
// should represent the sequence: -1, 3, 42
// note 0 is missing because default(int) is 0


这是一个简单的示例,仅使用基本类型,但是该思想对于任何LINQ用法(包括LINQ-to-SQL)都有效,这是LINQ的强大功能。不管您最终要使用LINQ-to-SQL还是仅仅是LINQ-Objects,都无关紧要。

关于linq-to-sql - 如何在不知道其类型的情况下在C#3.0中返回IQueryable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849009/

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