alc*_*cal 1 c# linq linq-to-sql
这是我正在使用的代码,我对LINQ仍然有点新,所以这是一项正在进行中的工作.具体来说,我想从此查询中获取结果(大约7列字符串,整数和日期时间),并将它们返回给调用包含此LINQ to SQL查询的方法的方法.一个简单的代码示例将非常有用.
using (ormDataContext context = new ormDataContext(connStr))
{
var electionInfo = from t1 in context.elections
join t2 in context.election_status
on t1.statusID equals t2.statusID
select new { t1, t2 };
}
Run Code Online (Sandbox Code Playgroud)
(在这种情况下,我的查询返回2个表的所有内容,选举和election_status.)
具体来说,我想从这个查询得到我的结果(大约7列字符串,整数和日期时间),并返回它们
嗨,你的查询问题是你正在创建一个匿名类型.您无法从方法返回匿名类型,因此这将是您遇到麻烦的地方.
你需要做的是创建一个"包装"类型,可以进行选举和elect_status,然后返回那些.
这是我正在谈论的一些小样本; 正如你所看到的,我宣布了一个Tuple类.您将查询包装的方法返回IEnumerable.
我希望这有帮助 :-)
class Tuple
{
Election election;
Election_status election_status;
public Tuple(Election election, Election_status election_status)
{
this.election = election;
this.election_status = election_status;
}
}
public IEnumerable<Tuple> getElections()
{
IEnumerable<Tuple> result = null;
using (ormDataContext context = new ormDataContext(connStr))
{
result = from t1 in context.elections
join t2 in context.election_status
on t1.statusID equals t2.statusID
select new Tuple(t1, t2);
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
根据NagaMensch的评论,实现所需结果的更好方法是使用内置的LINQ to SQL关联.
如果您转到实体图并单击工具箱,您将看到3个选项.类,关联和继承.我们想使用协会.
单击关联并单击ElectionStatus实体,按住鼠标按钮,它将允许您向选举实体绘制一条线.
绘制线后,它将询问您关联中涉及哪些属性.您希望从Election实体中选择StatusId列,并从ElectionStatus实体中选择StatusId列.
现在您已经完成了映射,您将能够大大简化查询,因为不需要连接.您可以通过LINQ to SQL将添加到Election实体的全新属性访问选举状态.
您的代码现在看起来像这样:
//context has to be moved outside the function
static ExampleDataContext context = new ExampleDataContext();
//Here we can return an IEnumerable of Election now, instead of using the Tuple class
public static IEnumerable<Election> getElections()
{
return from election in context.Elections
select election;
}
static void Main(string[] args)
{
//get the elections
var elections = getElections();
//lets go through the elections
foreach (var election in elections)
{
//here we can access election status via the ElectionStatus property
Console.WriteLine("Election name: {0}; Election status: {1}", election.ElectionName, election.ElectionStatus.StatusDescription);
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以在此处找到LINQ to SQL关联的"操作方法" .
注意:值得一提的是,如果您在数据库中的表之间建立了FK关系; LINQ to SQL将自动选择关系并为您映射关联(因此创建属性).