获取Linq查询的字段值 - SharePoint

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取Linq查询的字段值 - SharePoint相关的知识,希望对你有一定的参考价值。

我试图在日期范围之间限制我的结果。我正在使用CSOM连接到SharePoint。我认为SharePoint版本是SharePoint Online(我们有办公室365工作)。

基本上,我想限制下面查询返回的日期。我想要Start_Date <=今天和End_Date> =今天。不仅如此,我还不太了解如何使用linq返回字段的值。

我补充说:

.Where(x => x.Id <= 50)

哪个工作正常。这很容易,因为我可以找到智能感知的Id属性,但我找不到如何拉出我感兴趣的字段,以及如何使用linq限制我的结果与另外的Where。

现在我遇到以下错误,试图按原样运行我的代码:

The 'ToDateTime' member cannot be used in the expression.

相关守则:

    private ListItemCollection GetSharePointList(string XML, string tableName, ClientContext context, byte limit = 50)
    {
        List testTable = context.Web.Lists.GetByTitle(tableName);

        CamlQuery camlQuery = new CamlQuery
        {
            ViewXml = XML //The Passed in XML is: "<view></view>"
        };

        ListItemCollection GetSharePointList = testTable.GetItems(camlQuery);
        DateTime today = DateTime.Today;

        context.Load(GetSharePointList,
        items => items.Take(limit).Include(
                 item => item.Id,
                 item => item["DayOfMonth"],
                 item => item["Start_Date"],
                 item => item["End_Date"],
                 item => item["Task_FrequencyID_x003a_Frequency"],
                 item => item["TaskID_x003a_TaskName"],
                 item => item["TaskID_x003a_TaskAlias"],
                 item => item["TaskID_x003a_TaskDueTime"],
                 item => item["Daily_Frequency_x003a_DayofWeek"],
                 item => item["Weekly_Frequency_x003a_Week"],
                 item => item["End_Date"],
                 item => item["Monthly_Frequency"])
                        .Where(x => x.Id <= 50)
                        .Where(y => Convert.ToDateTime(y.FieldValues["Start_Date"]) <= today));

        context.ExecuteQuery();
        return GetSharePointList;
    }
答案

要限制Start_Date <= Today和End_Date> = Today之间的结果,您需要使用CAML查询。这就是它在SharePoint中的工作方式。

因此,您需要修改代码,如下所示:

List testTable = context.Web.Lists.GetByTitle(tableName);

var viewQuery = string.Format(@"<View>
    <Query>
      <Where>
        <And>        
         <Leq>
            <FieldRef Name='Start_Date' />
            <Value Type='DateTime'><Today /></Value>
         </Leq>
         <Geq>
            <FieldRef Name='End_Date' />
            <Value Type='DateTime'><Today /></Value>
         </Geq>
      </And>
     </Where>
    </Query>
</View>");

CamlQuery camlQuery = new CamlQuery
{
    ViewXml = viewQuery;
};

ListItemCollection GetSharePointList = testTable.GetItems(camlQuery);

context.Load(GetSharePointList,
    items => items.Include(
    item => item.Id,
    item => item["DayOfMonth"],
    item => item["Start_Date"],
    item => item["End_Date"],
    item => item["Task_FrequencyID_x003a_Frequency"],
    item => item["TaskID_x003a_TaskName"],
    item => item["TaskID_x003a_TaskAlias"],
    item => item["TaskID_x003a_TaskDueTime"],
    item => item["Daily_Frequency_x003a_DayofWeek"],
    item => item["Weekly_Frequency_x003a_Week"],
    item => item["End_Date"],
    item => item["Monthly_Frequency"]));
context.ExecuteQuery();

foreach(ListItem spListItem in GetSharePointList){
    //do something with the data
}

参考 - Retrieve list items using CSOM C#

以上是关于获取Linq查询的字段值 - SharePoint的主要内容,如果未能解决你的问题,请参考以下文章

从 Sharepoint 列表中获取所有项目,包括使用 CSOM 的查找值

LINQ 查询在 C# 中使用实体框架获取单列和单行值而不使用 Where

在 C# 中获取 SharePoint 富文本字段值

powershell 此powershell脚本使用字段名称获取所有值是sharepoint列表中的字段

无法从 Linq 查询 EF Core 访问字段值

无法在Sharepoint 2013在线自定义列表中使用SPD获取Lookup字段值