我有以下功能:
public void Test(IDataContext context)
{
return (From c In context.Table<DalLinq.Claim>()
Join cli In context.Table<DalLinq.ClaimLineItem>() On cli.ClaimId Equals c.ClaimId
Join ri In context.Table<DalLinq.ReceiptItem>() On ri.ReceiptItemId Equals cli.ReceiptItemId
Join r In context.Table<DalLinq.Receipt>() On r.ReceiptId Equals ri.ReceiptId
Select c, cli, ri, r)
}
我以前把它作为函数中的一个变量,但我现在需要它在多个地方,所以我把它放在一个函数中,但我不知道我的返回类型应该是什么。在示例中,它显示无效,但这是因为我不知道要放什么。
在return语句中给出以下/工作代码,这个返回类型应该是什么?
谢谢!
修改
我需要它作为一种非执行格式,所以我不能为它定位或为它创建自定义对象,因为它将被调用此方法的类进行过滤。
答案 0 :(得分:2)
您可以创建一个表示方法结果的类。
public class MyReturnClass
{
DalLinq.Claim Claim { get; set; }
DalLinq.ClaimLineItem ClaimLineItem { get; set; }
DalLinq.ReceiptItem ReceiptItem { get; set; }
DalLinq.Receipt Receipt { get; set; }
}
public MyReturnClass Test(IDataContext context)
{
return (From c In context.Table<DalLinq.Claim>()
Join cli In context.Table<DalLinq.ClaimLineItem>() On cli.ClaimId Equals c.ClaimId
Join ri In context.Table<DalLinq.ReceiptItem>() On ri.ReceiptItemId Equals cli.ReceiptItemId
Join r In context.Table<DalLinq.Receipt>() On r.ReceiptId Equals ri.ReceiptId
Select new MyReturnClass { Claim = c, ClaimLineItem = cli, ReceiptItem = ri, Receipt = r }).First();
}
答案 1 :(得分:1)
从您的代码中我假设context.Table<T>()
返回IQueryable<T>
,如果是这样的话,您可以写一下:
public static class IDataContextExtensions
{
public static IQueryable<T> MyFilter<T>(this IDataContext context, Func<Claim, ClaimLineItem, ReceiptItem, Receipt, T> resultor)
{
return from c fn context.Table<DalLinq.Claim>()
join cli in context.Table<DalLinq.ClaimLineItem>() on cli.ClaimId equals c.ClaimId
join ri in context.Table<DalLinq.ReceiptItem>() on ri.ReceiptItemId equals cli.ReceiptItemId
join r in context.Table<DalLinq.Receipt>() on r.ReceiptId equals ri.ReceiptId
select resultor(c, cli, ri, r);
}
}
这样你就不需要'dto'类了,你可以这样调用这个方法:
var data = myContext.MyFilter((c, cli, ri, r) => new
{
Claim = c,
ClaimLineItem = cli,
ReceiptItem = ri,
Receipt = r
}).ToList();
结果为IEnumerable<X>
,其中X
是传递给MyFilter
的匿名类型。
免责声明:未经测试的代码,只是展示了一个想法。