Comments (6)
It would be good to support DateTimeOffset (because it is a SQL Server type) but unfortunately protobuf-net doesn't support this natively yet so we wouldn't have any way of serializing it.
It seems protobuf-net doesn't support it because it would break .NET 2.0 compatibility. But that was nearly 3 years ago, much fewer people care about .NET 2.0 now so maybe we will see that change soon.
from protobuf-net-data.
Thanks for taking the time to reply.
I've another unrelated question, is it possible with protobuf-net-data to write linq type queries against a serialized stream. Something like mystream.AsEnumerable().AsQueryable().Select(.....). Currently I store Datatables using protobuf-net-data (which in terms of speed and size has proved a brilliant solution). What I have to do though to execute Linq queries is deserialize the data back to a datatable then execute a Linq query. Since my datatables can be quite large resources can come under pressure with this approach.
from protobuf-net-data.
Yep, IDataReader implements IDataRecord which you can use as a sort-of iterator which you can then query:
public static class DataReaderExtensions
{
public static IEnumerable<IDataReader> AsEnumerable(this IDataReader reader)
{
if (reader == null) throw new ArgumentNullException("reader");
while (reader.Read())
yield return reader;
}
}
...
var lastNames = reader
.AsEnumerable()
.Where(r => r.GetString(0) == "Richard") // have to use index unfortunately
.Select(r => r.GetString(1))
.Distinct();
This will still enumerate the entire data reader, but it won't need to buffer the entire DataTable in memory at once (only 1 row at a time is required).
from protobuf-net-data.
Great, thanks. I'll try that out
from protobuf-net-data.
Sorry to trouble you again, do you mean by the above that I need to write extension methods for Select, Where etc.
Taking the code as you have doesn't work as IDataReader doesn't implement Where, I added an extension method similar to:
public static IEnumerable Where(this IDataReader reader,
Func<IDataReader, IDataReader> whereFunc)
{
while (reader.Read())
{
yield return whereFunc(reader);
}
}
Now I can call with something like:
stream.Seek(0, SeekOrigin.Begin);
using (var reader = DataSerializer.Deserialize(stream))
{
while (reader.Read())
{
var lastNames = reader.Where(r => r.GetString(1).Length > 0);
}
}
the trouble is that I'm now not sure how to implement Select. Am I making any sense?
from protobuf-net-data.
Sorry the snippet should return type IEnumerable, which you can call linq methods e.g Where().
from protobuf-net-data.
Related Issues (20)
- Deserialization error "Arithmetic operation resulted in an overflow" HOT 2
- howto Connection.Close() in WCF transferMode="Streamed" and ProtoDataReader HOT 3
- how to return a stream, wrapped in a message contract in WCF transferMode="Streamed" and ProtoDataReader HOT 2
- Unless computed columns are included, serialization does not work in Mono HOT 3
- How can I stop/cancel my server work? HOT 2
- ProtoDataStream to work as cursor HOT 3
- We need Metadata also. HOT 2
- Could you please adding more guide/documentation on how to quick start?
- Port .net core? HOT 8
- Support data type 'System.DateTimeOffset' HOT 1
- Serialize DataSet HOT 1
- Fill the ringbuffer as data is being transmitted
- Possible bug in RecordReader HOT 3
- ProtoDataReader.GetOrdinal case-sensitivity bug
- Examples of streaming across the network?
- Incompatibility with protobuf-net v3
- How to deserialize binary data in javascript
- Update benchmark (benchmark link broken)
- New Deserialize Option - Don't close underlying stream HOT 2
- DeserializeDataSet with multiple tables
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from protobuf-net-data.