将SP Linq查询从测试站点移动到生产站点

将SP Linq查询从测试站点移动到生产站点,linq,sharepoint,Linq,Sharepoint,我看到了一些关于使用SPMetal生成允许LINQ正常工作的.cs文件的文章。我所说的文件继承自Microsoft.SharePoint.Linq.DataContext类。既然我需要在我的生产环境中使用SPMetal重新生成这个文件,那么我如何在不在生产环境中重新编译的情况下使用LINQ呢?我怀疑答案是“做不到” 我想我将使用CAML查询,除非有更简单的方法使用我缺少的LINQ。我想没有问题。就我个人而言,我已经使用Linq很长时间了。我从未生成专门用于生产的cs。您的站点在不同环境中是否有所

我看到了一些关于使用SPMetal生成允许LINQ正常工作的.cs文件的文章。我所说的文件继承自Microsoft.SharePoint.Linq.DataContext类。既然我需要在我的生产环境中使用SPMetal重新生成这个文件,那么我如何在不在生产环境中重新编译的情况下使用LINQ呢?我怀疑答案是“做不到”


我想我将使用CAML查询,除非有更简单的方法使用我缺少的LINQ。

我想没有问题。就我个人而言,我已经使用Linq很长时间了。我从未生成专门用于生产的cs。您的站点在不同环境中是否有所不同?

我不确定是否遗漏了这一点,但DataContext对象将URL作为构造函数的一部分,因此您应该从配置中的某个位置(例如数据库)检索URL

DataContext teamSite = new DataContext("http://MarketingServer/SalesTeam");
或者,如果代码具有SharePoint上下文,则使用SPContext对象。例如,在web部件中

DataContext teamSite = new DataContext(SPContext.Current.Web.Url);

如果目标只是使用LINQ查询列表,并且希望避免此类重新编译,则不要使用SPMetal。 LINQ可以直接用于SPListItemCollection e、 g

//或选择新建{Title=Item[“Title”]}

它没有硬编码实体,但更灵活。只要列表列名保持不变,即使其他列表正在更改,也可以在任何环境中部署代码。
您还可以选择检索少数选定字段的数据,而不是每次检索所有字段的数据。

为什么重新编译会成为一个问题?这似乎是Sharepoint的常见问题。我不明白MS为什么不能解决在多个环境中工作的人的问题。一个完整的皮塔。是的,你明白了。不同环境中的站点不同。我想我可以手动更改.cs文件以考虑差异。我希望有一种方法可以使用我的select语句,让它在没有额外文件的情况下工作。如果我说的是“从客户那里选择x”,而我已经提供了URL,那么这是可行的。但不幸的是,LINQ并不是这样工作的。即使我们进入数据库的关系世界,您也会期望您的环境中的数据结构具有相似性。不能为完全无关的数据结构编写。我想更令人担忧的是,为什么不同环境的数据结构不同。我的意思是,是什么用例促使他们变得不同,这是相似的。列表都是文档库,名称相同,列名和类型相同。我想说的是,如果这是查询该清单所需的唯一信息,那就方便了。也许我需要更深入地挖掘SPMetal来生成这些信息。我已经成功地跨环境使用了它,而没有重新生成实体。是的,你确实没有抓住要点,但没关系。重点是我的环境有些不同。LINQ无法提供AFAIK来解释不同的测试和生产环境。我看到的唯一解决方案是手动编辑SPMetal生成的.cs文件,并对其进行更改,使其与生产环境相匹配。不值得。什么是“应用列表”和应用列表。项目?什么是Common.ApplicationListFields.APPLICATIONID?假设我的SPList名为Customers,我的列名为Orders,并且我想检索Orders=5的所有客户,请重新格式化上述代码。我不想偷懒,但我想这会帮助我理解这是如何适用于我正在做的事情的。谢谢。我们已经修改了你的场景代码。结果是一个可枚举变量。您可以将.ToLis()添加到变量中,以获取SPListItem的通用列表。或者您可以使用select new{Title=Item[“Title”],Orders=Item[“Orders”]}选择匿名类型
 var FindCustomer = from SPListItem Item in Customers.Items
                       where Item["Orders"] as int == 5
                        select Item;