获取 Linq 查询的字段值 - SharePoint
Get Field Value For Linq Query - SharePoint
我一直试图将我的结果限制在一个日期范围内。我正在使用 CSOM 连接到 SharePoint。我认为的 SharePoint 版本是 SharePoint Online(我们有 office 365 在工作)。
基本上,我想在下面的查询中限制 returned 的日期。我想要 Start_Date <= 今天 和 End_Date >= 今天。不仅如此,我不太了解如何使用 linq return 字段的值。
我添加了这个:
.Where(x => x.Id <= 50)
工作正常。这很容易,因为我可以通过 Intellisense 找到 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 <= 今天和 End_Date >= 今天之间的结果,您需要使用 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
}
我一直试图将我的结果限制在一个日期范围内。我正在使用 CSOM 连接到 SharePoint。我认为的 SharePoint 版本是 SharePoint Online(我们有 office 365 在工作)。
基本上,我想在下面的查询中限制 returned 的日期。我想要 Start_Date <= 今天 和 End_Date >= 今天。不仅如此,我不太了解如何使用 linq return 字段的值。
我添加了这个:
.Where(x => x.Id <= 50)
工作正常。这很容易,因为我可以通过 Intellisense 找到 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 <= 今天和 End_Date >= 今天之间的结果,您需要使用 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
}