我想问一下是否有更好的方法来实现我想要做的事情。
我需要获得日期为greter或等于给定日期的子图的所有记录,以及第一条记录的日期与指定日期相同。
我发现这个解决方案有效,但我不确定这是最好的方法。
var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new
{
Istc0 = a,
Interests = a.Interests.Where(d => d.InDat >= date)
});
var qq = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new
{
Istc0 = a,
Interests = a.Interests.Where(d => d.InDat < date).OrderByDescending(d => d.InDat).Take(1)
});
var xxx = q.ToList()[0].Istc0;
xxx = qq.ToList()[0].Istc0;
return xxx;
答案 0 :(得分:1)
我不知道你需要返回哪一个。可能是yyy。
var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new
{
Istc0 = a,
Interests = a.Interests.Where(d => d.InDat >= date)
}).ToList();
var xxx = q[0].Istc0;
var yyy = q.OrderByDescending(d => d.InDat).Take(1).SingleOrDefault().Istc0;
Dictionary<string,decimal> result = new Dictionary<string,decimal>();
result.Add("all",xxx);
result.Add("previous",yyy);
return result;
在这个例子中,我创建一个带有字符串键的字典(可以是一个整数或任何你喜欢的),并带有一个十进制(我猜测返回的值是十进制类型)值来存储查询的结果。然后我返回这本字典。
另一种方法是拥有一个强类型对象并返回该对象的列表。
最后,您可以定义两个输出参数(read this)。例如:
public void GetInterestRates(string listKey, out decimal currentRate, out decimal previousRate)
{
var q = context.Istc0.Include("Interests").Where(a => a.IIsin == listKey).Select(a => new
{
Istc0 = a,
Interests = a.Interests.Where(d => d.InDat >= date)
}).ToList();
var currentRate = q[0].Istc0;
var previousRate = q.OrderByDescending(d => d.InDat).Take(1).SingleOrDefault().Istc0;
}
当你想要使用它时:
decimal currentRate , previousRate;
GetInterestRates(listKey, currentRate , previousRate);
答案 1 :(得分:0)
嗨谢谢你的回答。
根据您发布的查询,我无法获得所需的所有数据。我不认为我可以通过一个查询得到我需要的东西。
Interest table ----------------- 2013-5-16 | 1% 2013-6-21 | 0.8% 2013-7-12 | 0.5% 2013-8-06 | 0.6%
istc0表包含我所有的isin编号,以及与兴趣表一对多的关系。
函数的参数是日期。所以,如果我通过例如
date = 2013-7-01
我需要的结果如下:
Interest table ----------------- 2013-6-21 | 0.8% 2013-7-12 | 0.5% 2013-8-06 | 0.6%
因此,在我的fost帖子中,分配给q的第一个查询在7月之后检索所有兴趣,第一个分配给qq的第二个查询在7月之前检索第一个利率。 我的功能完成了这项工作,我得到了我需要的数据集,但它似乎并不是最干净的方法。