Linq 是否从查询中选择引用的数据而不引用表?

Linq 是否从查询中选择引用的数据而不引用表?,linq,linq-to-sql,Linq,Linq To Sql,我有一个使用LINQtoSQL的工具,有时我只需要提供一行文本数据。过去我做过这样的事情: results = (from x in [tablename] select new {myValue1 = "TextValue1", myValue2 = "TextValue2"}).Distinct(); 但这需要[tablename]中至少有一行,这不再是我可以依赖的 编辑: 更好的例子来了解我为什么需要这样做;我需要此查询(这是我在程序中可以编辑的全部内容)以返回“结果”中的所有内容并正确

我有一个使用LINQtoSQL的工具,有时我只需要提供一行文本数据。过去我做过这样的事情:

results = (from x in [tablename] select new {myValue1 = "TextValue1", myValue2 = "TextValue2"}).Distinct();
但这需要[tablename]中至少有一行,这不再是我可以依赖的

编辑: 更好的例子来了解我为什么需要这样做;我需要此查询(这是我在程序中可以编辑的全部内容)以返回“结果”中的所有内容并正确排序:

results = from z in (
 from x in [tablename]
 select new 
 {
  myValue1 = "TextValue1",
  myValue2 = "TextValue2"
 }
).Union(
 from y in [tablename]
 select new 
 {
  y.myValue1,
  y.myValue2
 }
)
orderby z.myValue1,z.myValue2
select new 
{
 z.myValue1,
 z.myValue2
};

对于一行,您可以使用

()//如果没有要返回的值,则引发错误

()//如果没有要返回的值,则不会抛出错误


由于您的方法返回一个常规的IList,您可以这样做吗

var results = new ArrayList();
results.Add(new {myValue1 = "First", myValue2 = "First"});
results.AddRange(myLinqQuery.ToList());
return results;

…其中
myLinqQuery
是您现有的查询。

为什么需要在SQL Server中执行此操作?你不能在内存中创建结果吗?如果没有更好的例子,我看不出这样做的价值。我正在尝试在LINQ查询中将表合并到这样的数据中。我正在使用的程序只允许我编辑LINQ查询,因此我需要在这一条语句中收集并限制我的结果。因此,您总是希望在您的
IQueryable
中返回的结果列表的开头有一个硬编码的
Result
?克里斯:是的,允许我编辑“results=”后面的内容然后在函数中返回“Results”。这段代码是“动态”编译的,不是用主程序编译的(主程序就是编译这段代码的程序),因此我无法编辑任何东西,除非“结果”等于什么。(这对我的问题并不重要)这种方法将返回糟糕的结果,因为正如您所看到的,如果在
[tablename]
中有100条记录,SQL server将返回100条带有harcoded文本的记录,并将100多条记录与数据库中的实际值合并;它将返回200个条目。为什么不在应用程序中添加已编码的文本,并根据字段在sql外部对其进行排序呢?这不是我的问题。如果[tablename]中有数据,我没有问题。我想要的是文本数据,即使[tablename]中没有数据。我甚至不需要[tablename]中的任何内容。
结果
对象无法识别。我试图修改它以使其正常工作,但找不到任何可编译的内容。@VeneralAgents:此类型名称取决于LINQ查询将返回的内容。我只是把它一般地称为
结果
。从您的代码中,看起来您正在返回一个匿名类型,但似乎您可以创建一个要在此处使用的类型。是的,它是一个匿名类型。我可能需要研究创建一个要使用的类型,但它需要与其他LINQ查询兼容,因为我需要加入并联合到它们。@VinerableAgents:您的方法返回什么类型?@VinerableAgents:确定。我编辑答案是为了做我认为你需要的事情。您似乎只需要返回对象的
IList
var results = new ArrayList();
results.Add(new {myValue1 = "First", myValue2 = "First"});
results.AddRange(myLinqQuery.ToList());
return results;